C H A P T E R 3

Driver Installation and Configuration

This chapter explains how to download and install the `nxge` driver used to operate certain ports on the Netra CP32x0 10GbE Ethernet Advanced Rear Transition Module, Dual Port (ARTM-10G). More specifically, the `nxge` driver facilitates use of SFP ports 1, 2, 3 and 4.

This chapter contains the following topics:

- Section 3.1, Installing the nxge Driver

- Section 3.2, Configuring the nxge Driver

- Section 3.3, Tuning Performance on a Linux Platform

- Section 3.4, Enabling Host Board PCI-Express Communication

- Section 3.5, Removing the nxge Driver

##

3.1 Installing the `nxge` Driver

The `nxge` driver is the Gigabit Ethernet driver that operates the Netra CP32x0 ARTM-10G in a Solaris or Linux environment. The `nxge` driver is managed by the `dladm` command-line utility, which allows VLANs to be defined on top of `nxge` instances and for `nxge` instances to be aggregated. See the `dladm`(1M) man page for more details on configuring the data-link interfaces and link aggregations.

A driver must be loaded on your system to operate the ARTM-10G. All OS’s use a variant of a driver design called `nxge`. New versions of this driver must be used to recognize and operate the new ARTM-10G hardware.

The `nxge` device driver automatically negotiates maximum link speed up to 10 Gbit/sec and conforms to the IEEE 802.3 Ethernet standard. Each interface is allocated eight receive DMA channels and twelve transmit DMA channels to enable parallel processing of the packets.

Ports 5 and 6 of the ARTM-10G are direct pass-through connections to the Zone 3 connector, and require no additional drivers for the ARTM installation. However, by default, these ports are off (disabled), and will not pass traffic unless the front ATCA blade is configured to redirect traffic to these ports.

Note - At this time, there is not a command or process available to route traffic to these ports. Refer to the Netra CP32x0 Advanced Rear Transition Module Product Notes Notes (820-3261).

### 3.1.1 Download and Install for Solaris Operating Systems

The `nxge` device driver is required for systems using the SPARC-based or x86-based Solaris Operating System.

### To Download and Install the Driver for Solaris Operating Systems

1. Locate and download the patch with the `nxge` device driver software from the following web site:

`http://www.sun.com/download`

Refer to the README file and the Netra CP32x0 Advanced Rear Transition Module Product Notes (820-3261) for the most current information.

2. Install the driver onto your system.

a. Uncompress or unzip the patch into the target directory.

b. Type the following commands to install the patch into the target directory:

    % cd <patch dir>
    % patchadd .

3. Verify that the `nxge` driver is installed on the system.

    Sun x8 10G/1G Ethernet Adapter Driver(i386)
    1.0,REV=2006.12.05.10.0 Copyright 2006 Sun Microsystems,
    Inc. All rights reserved. Use is subject to license terms.
    ## Executing checkinstall script. Using as the package base directory.
    ## Processing package information.
    ## Processing system information.
    4 package pathnames are already properly installed.
    ## Verifying package dependencies.
    ## Verifying disk space requirements.
    ## Checking for conflicts with packages already installed.
    ## Checking for setuid/setgid programs. This package contains
    scripts which will be executed with super-user permission
    during the process of installing this package.
    Do you want to continue with the installation of [y,n,?] y
    Installing Sun x8 10G/1G Ethernet Adapter Driver as
    ## Installing part 1 of 1.
    /kernel/drv/amd64/nxge [ verifying class ]
    # Executing postinstall script.
    # Installation of was successful.

### 3.1.2 Download and Install for Linux Operating Systems

The `nxge` device driver is required for systems using the Linux operating system.

### To Download and Install the Driver for Linux Operating Systems

1. Locate and download the patch with the `nxge` device driver software from the following web site:

`http://www.sun.com/download`

Refer to the README file and the Netra CP32x0 Advanced Rear Transition Module Product Notes (820-3261) for the most current information.

2. Choose the rpm that matches your OS distribution, for example:

    nxge-x.x-x.rpm

Where x.x-x is the version number.

3. List the network interfaces that exist prior to adding the driver package:

    # ifconfig -a |grep eth
    eth0      Link encap:Ethernet  HWaddr 00:14:4F:91:94:6E
    eth1      Link encap:Ethernet  HWaddr 00:14:4F:91:94:6F
    eth2      Link encap:Ethernet  HWaddr 00:14:4F:91:94:70
    eth3      Link encap:Ethernet  HWaddr 00:14:4F:91:94:71

4. Install the driver on Linux.

Where x is the most current version available.

    # rpm -ivh nxge-x.x-x.rpm
    Preparing... ######################################
    1:nxge-2.6.21-bigsmp ######################################

5. List the network interfaces again, and note the new network interface instances corresponding to the Netra CP32x0 ARTM-10G:

    # ifconfig -a |grep eth
    eth0      Link encap:Ethernet  HWaddr 00:14:4F:91:94:6E
    eth1      Link encap:Ethernet  HWaddr 00:14:4F:91:94:6F
    eth2      Link encap:Ethernet  HWaddr 00:14:4F:91:94:70
    eth3      Link encap:Ethernet  HWaddr 00:14:4F:91:94:71
    eth4      Link encap:Ethernet  HWaddr 00:14:4F:91:94:72
    eth5      Link encap:Ethernet  HWaddr 00:14:4F:91:94:73
    eth6      Link encap:Ethernet  HWaddr 00:14:4F:91:94:74
    eth7      Link encap:Ethernet  HWaddr 00:14:4F:91:94:75
    eth9      Link encap:Ethernet  HWaddr 00:11:0D:D0:04:C0
    eth10     Link encap:Ethernet  HWaddr 00:11:0D:D0:04:C2
    eth11     Link encap:Ethernet  HWaddr 00:11:0D:D0:04:C3
    eth12     Link encap:Ethernet  HWaddr 00:11:0D:D0:04:C1

The additional Netra CP32x0 ARTM-10G instances, `eth9` through `eth12`, are shown. The MAC address of the ARTM resource is easily identified as `00:11:0d:xx:xx:xx`.

6. Add the `nxge` interfaces to the `/etc/modules.conf` file to automatically load the driver after system reboot:

    alias eth9 nxge
    alias eth10 nxge
    alias eth11 nxge
    alias eth12 nxge

7. Check the parameter configurations that apply to the `nxge` driver.

    # ethtool -i eth9
    driver: nxge
    version: 2.1.0
    firmware-version: ARTM PXE1.4? FCode 3.14
    bus-info: 0000:02:00.0
    # ethtool  eth9
    Settings for eth9:
    Supported ports: [ FIBRE ]
    Supported link modes:
    Supports auto-negotiation: No
    Advertised link modes:  Not reported
    Advertised auto-negotiation: No
    Speed: Unknown! (10000)
    Duplex: Full
    Port: FIBRE
    PHYAD: 16
    Transceiver: internal
    Auto-negotiation: off
    Current message level: 0x000000ff (255)
    Link detected: yes

##

3.2 Configuring the `nxge` Driver

The Netra CP32x0 ARTM-10G includes six ports, which are controlled by the `nxge` driver:

- Two 1-Gigabit full duplex networking interfaces (ports 1 and 2)

- Two 10-Gigabit full-duplex network interfaces (ports 3 and 4)

- Two 10-Gigabit full-duplex network interfaces driven by ATCA front board resource (ports 5 and 6)

This section provides procedures for configuring `nxge` driver attributes and parameters, based on your OS.

- Section 3.2.1, Configuring nxge Driver Parameters on a Solaris Platform

- Section 3.2.2, Configuring Driver Parameters on a Linux Platform

### 3.2.1 Configuring `nxge` Driver Parameters on a Solaris Platform

You can configure and modify `nxge` device driver parameters in two ways:

- Using the `ndd` utility

- Using the `nxge.conf` file

If you use the `ndd` utility, the parameters are valid only until you reboot the system. This method is good for testing parameter settings.

#### 3.2.1.1 Modifying Parameters Using the `ndd` Utility

Use the `ndd` utility to configure parameters that are valid until you reboot the system (non-persistent configurations).

The following sections describe how to use the `ndd` utility to modify (with the -set option) or display (without the -set option) parameters for each `nxge` device.

The ndd utility can be invoked in either of two modes:

- Interactive menu mode. In this mode, the utility displays a menu of commands, and prompts you for each input value. You can set and get multiple parameters before exiting the utility.

- Non-interactive mode. In this mode, invoke the utility to execute a single command. Once the command is executed, the utility exits and returns to the command prompt.

Refer to the `ndd`(1M) man page for more information.

To Specify Device Instances

Before you use the `ndd` utility to get or set a parameter for an `nxge` device, you must specify the device instance for the utility.

Check the `/etc/path_to_inst` file to identify the instance associated with a device.

    # grep nxge /etc/path_to_inst
    "/pci@7c0/pci@0/pci@9/network@0" 0 "nxge"
    "/pci@7c0/pci@0/pci@9/network@0,1" 1 "nxge"
    "/pci@0/pci@0/pci@8/network@0" 2 "nxge"
    "/pci@0/pci@0/pci@8/network@0,1" 3 "nxge"
    "/pci@0/pci@0/pci@8/network@0,2" 4 "nxge"
    "/pci@0/pci@0/pci@8/network@0,3" 5 "nxge"
    "/pci@0/pci@0/pci@8/ethernet@0" 6 "nxge"
    "/pci@0/pci@0/pci@8/ethernet@0,1" 7 "nxge"
    "/pci@0/pci@0/pci@8/ethernet@0,2" 8 "nxge"
    "/pci@0/pci@0/pci@8/ethernet@0,3" 9 "nxge"
    "/niu@80/network@0" 0 "nxge"
    "/niu@80/network@1" 1 "nxge"

To Modify Parameters in Interactive Mode

1. Type `?` to see all the parameters supported by the `nxge` driver.

    # ndd /dev/nxge0
    name to get/set ? ?
    ? (read only)
    function_number (read only)
    fw_version (read only)
    adv_autoneg_cap (read and write)
    adv_10gfdx_cap (read and write)
    adv_1000fdx_cap (read and write)
    adv_100fdx_cap (read and write)
    adv_10fdx_cap (read and write)
    adv_pause_cap (read and write)
    accept_jumbo (read and write)
    rxdma_intr_time (read and write)
    rxdma_intr_pkts (read and write)
    class_opt_ipv4_tcp (read and write)
    class_opt_ipv4_udp (read and write)
    class_opt_ipv4_ah (read and write)
    class_opt_ipv4_sctp (read and write)
    class_opt_ipv6_tcp (read and write)
    class_opt_ipv6_udp (read and write)
    class_opt_ipv6_ah (read and write)
    class_opt_ipv6_sctp (read and write)

2. Modify a parameter value by specifying `ndd` `/dev/nxge<`x>, such as the following example.

    # ndd /dev/nxge0
    name to get/set?

3. Enter the parameter name.

After you enter the parameter name, the `ndd` utility prompts you for the parameter value.

4. Enter the parameter value or `?` for more information.

Refer to the `ndd`(1M) man page for more information.

To Modify Parameter Values in Non-Interactive Mode

1. Invoke the `ndd` utility with or without the `-set` option.

- When you invoke the `ndd` utility with the `-set` option, the utility passes value, which must be specified, down to the named `/dev/nxgedriver-instance`, and assigns the value to the parameter:

    # ndd -set /dev/nxge<x> <parameter-value>

Where x is the driver instance, for example `/dev/nxge0,` `/dev/nxge1`, and parameter-value is a valid input or option.

- When you omit the `-set` option, the utility queries the named driver instance, retrieves the value associated with the specified parameter, and prints the value:

    # ndd /dev/nxge<x>

Where x is the driver instance.

2. Display the value of a parameter by specifying the parameter name and omitting the value.

3. Modify a parameter value.

Refer to the `ndd`(1M) man page for more information.

#### 3.2.1.2 Modifying Parameters Using the `nxge.conf` File

Use an `nxge.conf` file when you want to establish persistent parameter values for a device in the system.

For more information, refer to the `prtconf`(1M) and `driver.conf`(4) man pages.

To Modify Parameters Using `nxge.conf` File

1. Obtain the hardware path names for the `nxge` devices in the device tree.

2. Check the `/etc/driver_aliases` file to identify the name associated with a device.

    # grep nxge /etc/driver_aliases
    nxge "pciex108e,abcd"

3. Locate the path names and the associated instance numbers in the `/etc/path_to_inst` file.

    # grep nxge/etc/path_to_inst
    "/pci@780/pci@0/pci@8/network@0" 0 "nxge"
    "/pci@780/pci@0/pci@8/network@0,1" 1 "nxge"

This command returns two `nxge` interfaces, and for each, includes three descriptive parameters:

- Instance pathname in quotes

- Instance Number (integer, no quotes)

- Instance driver name in quotes

The `nxge.conf` will likely contain information for several `nxge` interfaces. The output from steps 1 and 2 is used to specify the `nxge` interface, if needed. In this example:

    name = "pciex108e,abcd"
    parent = "/pci@780/pci@0/pci@8/network@0"
    unit-address = "0"

4. Edit the `/kernel/drv/nxge.conf` file to set `nxge` parameters.

For an output of all the parameters you can modify, see CODE EXAMPLE 3-1.

5. To set persistence for all parameters, specify the driver parameter properties for each device by creating an `nxge.conf` file located in the following directory:

- For SPARC-based host, `/platform/sunv4/kernel/drv/nxge.conf`

- For x86-based host, `/kernel/drv/nxge.conf`

Edits to `/kernel/drv/nxge.conf` file may be made with any ASCII, text editor.

To apply an edit to all ports, entries are listed with no specific node prefix. In this example, all modules are being set for load balancing RX traffic based on the IP source address. The default value is F80, indicating RX load balancing based on IP 5-tuple. Notice the semicolon at the end of the last parameter.

    class-opt-ipv4-tcp = 100;
    class-opt-ipv4-udp = 100;

6. To set persistence for a specific parameter, edit the `nxge.conf` file to add the specific parameter values.

These parameters are reloaded at each reboot.

To apply an edit to specific ports, an entry is prefixed with the node/interface specific information as shown:

    name = "pciex108e,abcd" parent = "/pci@780/pci@0/pci@8/" unitaddress = "0" class-opt-ipv4-tcp = 0x100;
    name = "pciex108e,abcd" parent = "/pci@7c0/pci@0/pci@9/" unitaddress = "0" class-opt-ipv4-tcp = 0x40;

7. Save the `nxge.conf` file.

The following CODE EXAMPLE 3-1 provides an output of all the parameters modifiable via the `nxge.conf` file. See also Chapter 4 for instructions on how to configure the network settings.

CODE EXAMPLE 3-1 Driver Parameters Modifiable via `nxge.conf` File
    #
    #---------------Link Configuration ----------------------
    # The link parameters depend on the type of the card
    # and the port.
    # 10-Gigabit related parameters ( i.e adv_10gfdx_cap)
    # apply only to 10gigabit ports.
    # Half duplex is not supported on any NIU card.
    #
    # adv-autoneg-cap
    # Advertise auto-negotiation capability.
    # default is 1
    # adv-autoneg-cap = 1;
    #
    # adv_10gfdx_cap
    # Advertise 10gbps Full duplex capability.
    # default is 1
    # adv_10gfdx_cap = 1;
    #
    # adv_1000fdx_cap
    # Advertise 1gbps Full duplex capability.
    # default is 1
    # adv_1000fdx_cap = 1;
    #
    # adv_100fdx_cap
    # Advertise 100mbps Full duplex capability.
    # default is 1
    # adv_100fdx_cap = 1;
    #
    # adv_10fdx_cap
    # Advertise 10mbps Full duplex capability.
    # default is 1
    # adv_10fdx_cap = 1;
    #
    # adv_asmpause_cap
    # Advertise Asymmetric pause capability.
    # default is 0
    # adv_asmpause_cap = 0;
    #
    # adv_pause_cap
    # Advertise pause capability.
    # default is 1
    # adv_pause_cap = 1;
    #
    #
    #------- Jumbo frame support ---------------------------------
    # To enable jumbo support for all nxge interfaces,
    # accept_jumbo = 1;
    #
    # To disable jumbo support for all nxge interfaces,
    # accept_jumbo = 0;
    #
    # Default is 0. See the example at the end of this file for
    # enabling or disabling jumbo for a particular nxge interface.
    #
    #
    #------- Receive DMA Configuration ----------------------------
    #
    # rxdma-intr-time
    # Interrupts after this number of NIU hardware ticks have
    # elapsed since the last packet was received.
    # A value of zero means no time blanking (Default = 8).
    #
    # rxdma-intr-pkts
    # Interrupt after this number of packets have arrived since
    # the last packet was serviced. A value of zero indicates
    # no packet blanking (Default = 20).
    #
    # Default Interrupt Blanking parameters.
    #
    # rxdma-intr-time = 8;
    # rxdma-intr-pkts = 20;
    #
    #
    #------- Classification and Load Distribution Configuration ------
    #
    # class-opt-****-***
    # These variables define how each IP class is configured.
    # Configuration options range from whether TCAM lookup ie
    # is enabled to flow hash generation.
    # This parameters also control how the flow template is
    # constructed and how packet is distributed within RDC
    # groups.
    #
    # supported classes:
    # class-opt-ipv4-tcp class-opt-ipv4-udp class-opt-ipv4-sctp
    # class-opt-ipv4-ah class-opt-ipv6-tcp class-opt-ipv6-udp
    # class-opt-ipv6-sctp class-opt-ipv6-ah
    #
    # Configuration bits (The following bits will be decoded
    # by the driver as hex format).
    #
    # 0010: use MAC Port (for flow key)
    # 0020: use L2DA (for flow key)
    # 0040: use VLAN (for flow key)
    # 0080: use proto (for flow key)
    # 0100: use IP src addr (for flow key)
    # 0200: use IP dest addr (for flow key)
    # 0400: use Src Port (for flow key)
    # 0800: use Dest Port (for flow key)
    #
    # class-opt-ipv4-tcp = fe0;
    The following parameters operate on a per port basis and can be set using the /kernel/drv/nxge.conf file.
    #
    # ------- How to set parameters for a particular interface --------
    # The example below shows how to locate the device path and set a
    # parameter for a particular nxge interface. (Using jumbo support as
    # an example)
    #
    # Use the following command to find out the device paths for nxge,
    # more /etc/path_to_inst | grep nxge
    #
    # For example, if you see,
    # "/pci@7c0/pci@0/pci@8/network@0" 0 "nxge"
    # "/pci@7c0/pci@0/pci@8/network@0,1" 1 "nxge"
    # "/pci@7c0/pci@0/pci@8/network@0,2" 2 "nxge"
    # "/pci@7c0/pci@0/pci@8/network@0,3" 3 "nxge"
    #
    # then you can enable jumbo for ports 0 and 1 and disable jumbo for ports 2
    # and 3 as follows,
    #
    # name = "pciex108e,abcd" parent = "/pci@7c0/pci@0/pci@8/" unit-address
    = "0"
    # accept_jumbo = 1;
    # name = "pciex108e,abcd" parent = "/pci@7c0/pci@0/pci@8/" unit-address
    = "0,1"
    # accept_jumbo = 1;
    # name = "pciex108e,abcd" parent = "/pci@7c0/pci@0/pci@8/" unit-address
    = "0,2"
    # accept_jumbo = 0;
    # name = "pciex108e,abcd" parent = "/pci@7c0/pci@0/pci@8/" unit-address
    = "0,3"
    # accept_jumbo = 0;

### 3.2.2 Configuring Driver Parameters on a Linux Platform

Use the `ethtool` utility or the `configtool` utility to modify `nxge` driver parameters on a Linux platform.

#### 3.2.2.1 Modifying Parameters Using the `ethtool` Utility

This section describes `ethtool` commands for modifying driver parameters. Refer to the `ethtool`(1M) man page for more information and detailed usage examples.

To Determine Modifiable Parameters

Use the `ethtool` utility to list all driver parameters that can be modified.

CODE EXAMPLE 3-2 Listing Modifiable Driver Parameters on a Linux Platform
    # ethtool -help eth4
    ethtool version 3
    Usage:
    ethtool DEVNAME
    ethtool -a DEVNAME
    ethtool -A DEVNAME \
    [ autoneg on|off ] \
    [ rx on|off ] \
    [ tx on|off ]
    ethtool -c DEVNAME
    ethtool -C DEVNAME \
    [adaptive-rx on|off] \
    [adaptive-tx on|off] \
    [rx-usecs N] \
    [rx-frames N] \
    [rx-usecs-irq N] \
    [rx-frames-irq N] \
    [tx-usecs N] \
    [tx-frames N] \
    [tx-usecs-irq N] \
    [tx-frames-irq N] \
    [stats-block-usecs N] \
    [pkt-rate-low N] \
    [rx-usecs-low N] \
    [rx-frames-low N] \
    [tx-usecs-low N] \
    [tx-frames-low N] \
    [pkt-rate-high N] \
    [rx-usecs-high N] \
    [rx-frames-high N] \
    [tx-usecs-high N] \
    [tx-frames-high N] \
    [sample-interval N]
    ethtool -g DEVNAME
    ethtool -G DEVNAME \
    [ rx N ] \
    [ rx-mini N ] \
    [ rx-jumbo N ] \
    [ tx N ]
    ethtool -i DEVNAME
    ethtool -d DEVNAME
    ethtool -e DEVNAME \
    [ raw on|off ] \
    [ offset N ] \
    [ length N ]
    ethtool -E DEVNAME \
    [ magic N ] \
    [ offset N ] \
    [ value N ]
    ethtool -k DEVNAME
    ethtool -K DEVNAME \
    [ rx on|off ] \
    [ tx on|off ] \
    [ sg on|off ] \
    [ tso on|off ]
    ethtool -r DEVNAME
    ethtool -p DEVNAME [ %d ]
    ethtool -t DEVNAME [online|(offline)]
    ethtool -s DEVNAME \
    [ speed 10|100|1000 ] \
    [ duplex half|full ] \
    [ port tp|aui|bnc|mii|fibre ] \
    [ autoneg on|off ] \
    [ phyad %d ] \
    [ xcvr internal|external ] \
    [ wol p|u|m|b|a|g|s|d... ] \
    [ sopass %x:%x:%x:%x:%x:%x ] \
    [ msglvl %d ]
    ethtool -S DEVNAME

Following are common parameters that can be changed:

CODE EXAMPLE 3-3 Common Parameters That are Modifiable on a Linux Platform
    # ethtool -c eth8
    Coalesce parameters for eth8:
    Adaptive RX: off TX: off
    stats-block-usecs: 0
    sample-interval: 0
    pkt-rate-low: 0
    pkt-rate-high: 0
    rx-usecs: 8
    rx-frames: 512
    rx-usecs-irq: 0
    rx-frames-irq: 512
    tx-usecs: 0
    tx-frames: 0
    tx-usecs-irq: 0
    tx-frames-irq: 0
    rx-usecs-low: 0
    rx-frame-low: 0
    tx-usecs-low: 0
    tx-frame-low: 0
    rx-usecs-high: 0
    rx-frame-high: 0
    tx-usecs-high: 0
    tx-frame--high: 0

The parameters `rx-usecs` and `rx-frames` control the RX interrupt rate per RX DMA channel. RX interrupt will be generated after `rx-frame`s have been received or after `rxusecs` time interval, if fewer than `rx-frames` have been received within the interval.

- For low latency applications, set `rx-usecs` to a smaller value.

- For bulk traffic, use larger values of `rx-usecs` and control the rate with `rx-frames`.

The `rx-frames-irq` controls the maximum number of RX packets processed with a single RX interrupt.

To Change RX Coalesce Parameters

Use the `ethtool` `-C` command.

CODE EXAMPLE 3-4 Changing RX Coalesce Parameters
    # ethtool -C eth4 rx-usecs 20
    # ethtool -c eth4
    Coalesce parameters for eth4:
    Adaptive RX: off TX: off
    stats-block-usecs: 0
    sample-interval: 0
    pkt-rate-low: 0
    pkt-rate-high: 0
    rx-usecs: 20
    rx-frames: 512
    rx-usecs-irq: 0
    rx-frames-irq: 512
    tx-usecs: 0
    tx-frames: 0
    tx-usecs-irq: 0
    tx-frames-irq: 0
    rx-usecs-low: 0
    rx-frame-low: 0
    tx-usecs-low: 0
    tx-frame-low: 0
    rx-usecs-high: 0
    rx-frame-high: 0
    tx-usecs-high: 0
    tx-frame-high: 0

To Obtain the Status of L4 Hardware

Use the `ethtool` `-k` command.

CODE EXAMPLE 3-5 Obtaining Status of L4 Hardware
    # ethtool -k eth4
    Offload parameters for eth4:
    Cannot get device tcp segmentation offload settings: Operation not supported
    rx-checksumming: on
    tx-checksumming: on
    scatter-gather: off
    tcp segmentation offload: off

#### 3.2.2.2 Modifying Parameters Using `configtool` Utility

This section describes how to use the `configtool` utility to modify driver parameters.

To Obtain a List of Modifiable Parameters

Use the `nxge_config` `if-name` `get` command.

CODE EXAMPLE 3-6 Obtaining a List of Tunable Driver Parameters on a Linux Platform
    # /usr/local/bin/nxge_config eth4 get
    The tunable parameters exported by this device are:
    class_opt_ipv4_tcp Read-Write
    class_opt_ipv4_udp Read-Write
    class_opt_ipv4_ah Read-Write
    class_opt_ipv4_sctp Read-Write
    class_opt_ipv6_tcp Read-Write
    class_opt_ipv6_udp Read-Write
    class_opt_ipv6_ah Read-Write
    class_opt_ipv6_sctp Read-Write

These classification variables define how each IP class is configured. These parameters also control how the flow template is constructed and how packets are distributed within RDC groups.

    Configuration bits:
    0x0010: use MAC Port (for flow key)
    0x0020: use L2DA (for flow key)
    0x0040: use VLAN (for flow key)
    0x0080: use proto (for flow key)
    0x0100: use IP src addr (for flow key)
    0x0200: use IP dest addr (for flow key)
    0x0400: use Src Port (for flow key)
    0x0800: use Dest Port (for flow key)

Note - The classification variables are modified on an ARTM basis. That is, if any of these variables is modified for one port, the change carries over to all other ports of the ARTM.

To Display a Parameter

Use the `nxge_config` `<`if-name get param-name`>` command.

    # /usr/local/bin/nxge_config eth4 get class_opt_ipv4_udp
    class_opt_ipv4_udp 0xfe3

To Modify a Specific Parameter

Use the `/usr/local/bin/nxge_config` `<`if_name set param_name`>` command.

    # /usr/local/bin/nxge_config eth4 set class_opt_ipv4_tcp 0xfe0

##

3.3 Tuning Performance on a Linux Platform

The following procedure improves the performance of the Netra CP32x0 ARTM-10G ports on a system running the Linux OS.

### To Tune Ethernet Port Performance

1. Using any ASCII text editor, create a new `.conf` file that will be passed to the `sysctl` utility.

For example, `sysctl_e1000.conf`

CODE EXAMPLE 3-7 Sample `.conf` File for Tuning Ethernet Ports on a Linux Platform
    ### IPV4 specific settings
    # turns TCP timestamp support off, default 1, reduces CPU use
    net.ipv4.tcp_timestamps = 0
    # turn SACK support off, default on systems with a VERY fast bus ->
    # memory interface this is the big gainer
    net.ipv4.tcp_sack = 0
    # sets min/default/max TCP read buffer, default 4096 87380 174760
    net.ipv4.tcp_rmem = 10000000 10000000 10000000
    # sets min/pressure/max TCP write buffer, default 4096 16384 131072
    net.ipv4.tcp_wmem = 10000000 10000000 10000000
    # sets min/pressure/max TCP buffer space, default 31744 32256 32768
    net.ipv4.tcp_mem = 10000000 10000000 10000000
    ### CORE settings (mostly for socket and UDP effect)
    # maximum receive socket buffer size, default 131071
    net.core.rmem_max = 524287
    # maximum send socket buffer size, default 131071
    net.core.wmem_max = 524287
    # default receive socket buffer size, default 65535
    net.core.rmem_default = 524287
    # default send socket buffer size, default 65535
    net.core.wmem_default = 524287
    # maximum amount of option memory buffers, default 10240
    net.core.optmem_max = 524287
    # number of unprocessed input packets before kernel starts dropping
    # them, default 300
    net.core.netdev_max_backlog = 300000

2. To apply your settings, invoke the `sysctl` utility, including the configuration file as follows:

    # sysctl -p /etc/sysctl_nxge.conf

##

3.4 Enabling Host Board PCI-Express Communication

Presently, only the Sun Netra CP3260 blade server can be configured to use PCI-express signals to communicate with the Netra CP32x0 ARTM-10G. By default, the host blade server is usually shipped with these signals disabled. The following procedure enables PCI-express signals.

### To Enable PCI-Express Signals

1. Do one of the following:

- If using a SPARC-based host board, skip to Step 2.

- If using an x86-based host board, perform the following:

a. At boot, invoke the BIOS menu (ESC 2, F2, Ctrl-C, or Ctrl-E).

b. Under the Chipset menu/Southbridge menu, disable Spread Spectrum clocking for PCI-E.

c. Save and Exit the BIOS.

2. Establish a console connection with the shelf manager.

3. Type the shelf command `clia` to determine the slot location of the host board that will connect to the Netra CP32x0 ARTM-10G.

The shelf manager will show a Device ID String indicating the host board.

4. Enter the `clia` `sendcmd` xx `2e` `8b` `00` `00` `2a` `9` `1c` command.

Where xx is the board address.

5. At the shelf manager, type `clia` `board` to find the correct number for your host board installation.

6. Type the shelf `clia` `boardreset` `2` command.

##

3.5 Removing the `nxge` Driver

If you want to remove the `nxge` driver from your system, perform the following procedure, based on your OS.

### To Remove the Driver From a Solaris Platform

1. Determine the driver packages:

    # pkginfo | grep nxge
    SUNWnxge Sun x8 10G/1G Ethernet Adapter Driver

2. Remove the driver packages:

    # pkgrm SUNWnxge

### To Remove the Driver From a Linux Platform

Type the following:

    # rpm -e nxge

Copyright © 2008 Sun Microsystems, Inc. All Rights Reserved.