ONIE has modest hardware requirements. The NOS definitely has additional hardware requirements.
Note
ONIE has no specific CPU architecture requirements – it is Linux.
Currently ONIE supports x86, PowerPC 32/64-bit and ARM 32/64-bit CPU architectures.
PowerPC and ARM CPU architectures both utilize the U-Boot boot loader and are called “U-Boot Platforms” throughout this specification.
This section lists the switch hardware requirements for an ONIE-compatible switching platform.
For CPU architecture specific details see these sections:
Each ONIE system must include non-volatile storage which contains vital product data assigned by the manufacturer. The non-volatile storage could take the form of an EEPROM, a NOR-flash sector, a NAND-flash sector or any other non-volatile storage medium.
Note
In this document the term EEPROM
is used to refer to the
non-volatile storage medium, but it could be any non-volatile
storage.
This EEPROM includes information such as the MAC address(es) allocated
to the system, the serial number, the date of manufacturer, etc. The
name of the EEPROM format specified here is TlvInfo
, because the
information contained in the EEPROM is found in TLVs, or Type
Length and Value fields.
The first eight bytes in the EEPROM are the NULL-terminated ASCII string
TlvInfo
. This identification string can be used as a simple, preliminary
check that the EEPROM conforms to the TlvInfo format defined here. Additional
validation checks should be performed to validate that the TlvInfo format is
really being used, such as validating the CRC. But this string provides a good
clue, when debugging or dumping memory, that what follows is in the TlvInfo
EEPROM format.
The identification string is followed by a single-byte version value. This value is set to 0x01 for the TlvInfo EEPROM format described on this page. Since the format described herein is very flexible and extensible, this value is not expected to ever change, but is included just in case. Software should not assume anything about the format of the data that follows this byte if it has not been written to support the version it reads from this value. The values 0x00 and 0xFF are reserved and will never be used.
The version field is followed by two bytes, which give the total length of the data that follows. This field is in big endian order and includes the cumulative length of all of the TLV fields that follow. This field can be used to determine the amount of data to read, if the EEPROM data is read in bulk, following the first 11 bytes. This field can also be used to determine the location of the CRC, since the CRC-32 TLV is fixed length and always the last TLV in the EERPOM.
The total length field is followed by the EEPROM system data, known as TLV fields. Each TLV field is composed of three sub-fields: a type code field, a length field, and a value field, in that order.
Only the CRC-32 TLV is required to be present by this specification, but some systems may not initialize properly without the presence of other fields. The CRC-32 TLV must occur last. This field can be quickly found at the following offset in the EEPROM by adding 11 (the length of the fixed header information) + the value of the total length field - 6 (the length of the CRC-32 TLV field).
The total length of the TlvInfo EEPROM data, from the first byte of the identification string to the last byte of the CRC TLV, must be less than or equal to 2048 bytes.
The layout of the entire EEPROM block looks like:
Field Name | Size in Bytes | Value |
---|---|---|
ID String | 8 | “TlvInfo” |
Header Version | 1 | 0x01 |
Total Length | 2 | Total number of bytes that follow |
TLV 1 | Varies | The data for TLV 1 |
TLV 2 | Varies | The data for TLV 2 |
….. | ….. | ….. |
TLV N | Varies | The data for TLV N |
CRC-32 TLV | 6 | Type = 0xFE, Length = 4, Value = 4 byte CRC-32 |
The following type codes are defined.
Type Code | Length | Description | Format |
---|---|---|---|
0x00 | None | Reserved | This type code is illegal and will never be used, so that it will be easy to detect if a portion of the EEPROM is erased. |
0x21 | Variable | Product Name | An ASCII string containing the product name. |
0x22 | Variable | Part Number | An ASCII string containing the vendor’s part number for the device. |
0x23 | Variable | Serial Number | An ASCII string containing the serial number of the device. |
0x24 | 6 bytes | MAC #1 Base | Six bytes containing the base MAC address for this device. The first three bytes contain the OUI of the assigning authority. |
0x25 | 19 bytes | Manufacture Date | An ASCII string that specifies when the device was manufactured. The format of this string is: MM/DD/YYYY HH:NN:SS where MM is the month (01-12), DD is the day of the month (01-31), YYYY is the year, HH is the hour (00-23), NN is the minute (00-59), and SS is the second (00-59). |
0x26 | 1 byte | Device Version | A single byte indicating the version, or revision, of the device. |
0x27 | Variable | Label Revision | An ASCII string containing the label revision. |
0x28 | Variable | Platform Name | An ASCII string which identifies a CPU subsystem (CPU, architecture, DRAM, NOR flash). Very useful when the CPU resides on a daughter card. Typically this includes <arch>-<machine>-<machine_revision>. |
0x29 | Variable | ONIE Version | An ASCII string containing the version of the ONIE software installed by the manufacturer. |
0x2A | 2 bytes | Num MACs | A two-byte big-endian unsigned integer describing the number of sequential MAC addresses allocated to this device, starting with the value specified in the MAC #1 Base TLV (code 0x2A). Valid values for this field range from 1 to 65535. |
0x2B | Variable | Manufacturer | An ASCII string containing the name of the entity that manufactured the device. |
0x2C | 2 bytes | Country Code | A two-byte ASCII string containing the ISO 3166-1 alpha-2 code of the country where the device was manufactured. |
0x2D | Variable | Vendor | The name of the vendor who contracted with the manufacturer for the production of this device. This is typically the company name on the outside of the device. |
0x2E | Variable | Diag Version | An ASCII string containing the version of the diagnostic software. |
0x2F | Variable | Service Tag | An ASCII string containing a vendor defined service tag. |
0xFD | Variable | Vendor Extension | This type code allows vendors to include extra information that is specific to the vendor and cannot be specified using the other type codes. The format of this value field is a four byte big-endian IANA enterprise number, followed by a vendor defined string of bytes. The format of the string of bytes is entirely up to the vendor, except that it can be, at most, 255 bytes long, including the IANA enterprise number. If more space is needed, then multiple TLVs with this type code can be used. |
0xFE | 4 bytes | CRC-32 | A four-byte big-endian CRC which covers the EEPROM contents
from the first byte of the EEPROM (the “T” in the
“TlvInfo” identification string) to the length
field of this TLV, inclusive. This CRC uses the
crc32 algorithm (see Python’s binascii.crc32()
function). |
0xFF | None | Reserved | This type code is illegal and will never be used, so that it will be easy to detect if a portion of the EEPROM is erased. |
A very critical characteristic of a switching platform EEPROM is the number of MAC addresses allocated to the machine. The ONIE project requires allocating 1 MAC address for every serdes on the box.
For example, consider a machine that has one Ethernet management port and a switching ASIC with 48x10G ports plus 6x40G ports. Each 40G port could be broken out into 4x10G ports. Therefore, the total number of MAC addresses this machines requires is:
1 -- Ethernet management port
48 -- 1 for each 48x10G port
24 -- 4 for each 6x40G port
-----------------------------
73 Total MACs
To encode that in the EEPROM, set TLV code 0x2A (Num MACs) to 73.
Maintenance of this EEPROM format specification and allocation of the TLV type codes is handled by the ONIE Project.
The default serial console baud rate is 115200. The end customer is free to change this if necessary.
Out of the factory the default serial console baud rate is expected to be 115200.
The ONIE project recommends the following conventions for the sheet metal silkscreen on the machine:
The ONIE project recommends that the switch packaging include a one page (two sides printed) Quick Start Guide flyer. This is similar to what is included with most commercial products.
Such a flyer would include the following:
eth0
“management Ethernet” and “out of band” serial console.Following these recommendations will improve the operational experience of the end customer.
The ONIE project recommends the following regarding asset tracking labels:
Following these recommendations will improve the operational experience of the end customer.