2N/A * The contents of this file are subject to the terms of the 2N/A * Common Development and Distribution License (the "License"). 2N/A * You may not use this file except in compliance with the License. 2N/A * See the License for the specific language governing permissions 2N/A * and limitations under the License. 2N/A * When distributing Covered Code, include this CDDL HEADER in each 2N/A * If applicable, add the following below this CDDL HEADER, with the 2N/A * fields enclosed by brackets "[]" replaced with your own identifying 2N/A * information: Portions Copyright [yyyy] [name of copyright owner] 2N/A * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. 2N/A * `len' always includes 7 bits of type and 9 bits of length of 2N/A * TLV, i.e., 2 bytes of type and length, so subtract 2 from `len' 2N/A * to get the actual length of the value. 2N/A /* first set the org. specific tlv type */ 2N/A * +--------+----------------+--------------+-------------+ 2N/A * | TLV | TLV information| Chassis ID | Chassis ID | 2N/A * | Type | string len | TLV subtype | | 2N/A * +--------+----------------+--------------+-------------+ 2N/A * 7bits 9 bits 8 bits 1 to 255 octets 2N/A * Depending on the value of the chassis ID subtype, the chassis ID can 2N/A * contain alphanumeric data or binary data. 2N/A /* convert the series of bytes into numeric string */ 2N/A return (
"ChassisComponent");
2N/A return (
"InterfaceAlias");
2N/A return (
"InterfaceName");
2N/A return (
"PortComponent");
2N/A return (
"MacAddress");
2N/A return (
"NetworkAddress");
2N/A /* check to see if chassis ID is framed correctly */ 2N/A * +--------+----------------+--------------+-------------+ 2N/A * | TLV | TLV information| Port ID | Port ID | 2N/A * | Type | string len | TLV subtype | | 2N/A * +--------+----------------+--------------+-------------+ 2N/A * 7bits 9 bits 8 bits 1 to 255 octets 2N/A * Depending on the value of the port ID subtype, the port ID can 2N/A * contain alphanumeric data or binary data. 2N/A /* convert the series of bytes into numeric string */ 2N/A return (
"InterfaceAlias");
2N/A return (
"PortComponent");
2N/A return (
"InterfaceName");
2N/A return (
"MacAddress");
2N/A return (
"AgentCircuitId");
2N/A return (
"NetworkAddress");
2N/A/* Get the port ID TLV */ 2N/A /* check to see if portID is framed correctly */ 2N/A * +--------+----------------+----------------------------+ 2N/A * | TLV | TLV information| time to live (TTL) | 2N/A * | Type | string len | | 2N/A * +--------+----------------+----------------------------+ 2N/A * 7bits 9 bits 2 octets 2N/A/* Get the TTL TLV */ 2N/A * As per 9.2.7.7.2 of IEEE802.1AB, it's fine if the length 2N/A * is greater than two. However we copy only the first 2 bytes 2N/A/* General routine to add a string to an LLDPDU */ 2N/A /* check to see if we can accomodate this info in the pdu */ 2N/A/* General routine to parse a string from LLDPDU */ 2N/A * If the TLV information string length value is not exactly equal to 2N/A * the sum of the lengths of all fields contained in the TLV 2N/A * information string then we discard the LLDPDU. 2N/A * Port Description TLV 2N/A * +--------+----------------+----------------------------+ 2N/A * | TLV | TLV information| port description | 2N/A * | Type | string len | | 2N/A * +--------+----------------+----------------------------+ 2N/A * 7bits 9 bits 0 to 255 octets 2N/A/* Get the port desc TLV */ 2N/A * +--------+----------------+----------------------------+ 2N/A * | TLV | TLV information| system name | 2N/A * | Type | string len | | 2N/A * +--------+----------------+----------------------------+ 2N/A * 7bits 9 bits 0 to 255 octets 2N/A/* Get the system Name TLV */ 2N/A * +--------+----------------+----------------------------+ 2N/A * | TLV | TLV information| system description | 2N/A * | Type | string len | | 2N/A * +--------+----------------+----------------------------+ 2N/A * 7bits 9 bits 0 to 255 octets 2N/A/* Get the system description TLV */ 2N/A * +--------+----------------+--------------+---------------+ 2N/A * | TLV | TLV information| system | enabled | 2N/A * | Type | string len | capabilities | capabilities | 2N/A * +--------+----------------+--------------+---------------+ 2N/A * 7bits 9 bits 2 octets 2 octets 2N/A/* Get the sys capab TLV */ 2N/A * +-----+-------+-------+-------+--------+-----------+----------+------+----+ 2N/A * | TLV | TLV | mgmt. | mgmt | mgmt | interface |interface | OID | | 2N/A * | Type| info. |address|address|address | numbering | number |length| OID| 2N/A * | |length |length |subtype| | subtype | | | | 2N/A * +-----+-------+-------+-------+--------+-----------+----------+------+----+ 2N/A * 7bits 9bits 1 1 1-31 1 4 1 0-128 2N/A/* Get the organization specific OUI and subtype info */ 2N/A /* 3 bytes OUI + a byte of subtype */ 2N/A * +--------+----------------+----------+--------+------------+------------+ 2N/A * | TLV | TLV information| 802.1OUI| 802.1 |aggregation | aggregated | 2N/A * | Type | string len | 00-80-C2| subtype| status | port ID | 2N/A * +--------+----------------+----------+--------+------------+------------+ 2N/A * 7bits 9 bits 3 octets 1 octet 1 octet 4 octets 2N/A * Should have the status and aggregation id. 2N/A /* Move past the OUI and subtype */ 2N/A * +--------+----------------+--------------+-------------+---------------+ 2N/A * | TLV | TLV information| 802.3OUI | 802.3 | Maximum 802.3 | 2N/A * | Type | string len | 00-12-0F | subtype | Frame size | 2N/A * +--------+----------------+--------------+-------------+---------------+ 2N/A * 7bits 9 bits 3 octets 1 octet 2 octets 2N/A /* frame size is 2 bytes */ 2N/A /* Move past the OUI and subtype */ 2N/A /* extract the frame size */ 2N/A * +--------+----------------+--------------+-------------+-------------+ 2N/A * | TLV | TLV information| 802.1OUI | 802.1 |port VLAN ID | 2N/A * | Type | string len | 00-80-C2 | subtype | (PVID) | 2N/A * +--------+----------------+--------------+-------------+-------------+ 2N/A * 7bits 9 bits 3 octets 1 octet 2 octets 2N/A /* sizeof pvid is 2 bytes */ 2N/A /* Move past the OUI and subtype */ 2N/A * +--------+----------------+----------+--------+-----+----------+------+ 2N/A * | TLV | TLV information| 802.1OUI| 802.1 |VLAN |VLAN name | VLAN | 2N/A * | Type | string len | 00-80-C2| subtype| ID | Len | name | 2N/A * +--------+----------------+----------+--------+-----+----------+------+ 2N/A * 7bits 9 bits 3 octets 1 octet 2oct 1 octet 0-32 octets 2N/A/* Caller frees vlan memory */ 2N/A /* Move past the OUI and subtype */ 2N/A * +------+------------+-----------+---------+---------+-------+------+-------+ 2N/A * | TLV | TLV info | OracleOUI | Orcale | Reser- |Vlan ID |PortID |Port | 2N/A * | Type | string len | 00-03-BA | subtype | ved | |subtype | ID | 2N/A * +------+------------+-----------+---------+--------+--------+------+-------+ 2N/A * 7 bits 9 bits 3 octets 8 bits 4 octets 2octets 8bits 1-255 2N/A/* Caller frees vnic memory */ 2N/A /* Move past the OUI and subtype */ 2N/A /* Move past the reserved bits */ 2N/A /* Get the VLAN ID */ 2N/A /* get the port id info */ 2N/A /* Port ID subtype */ 2N/A * +--------+----------------+----------+--------+------------------------+ 2N/A * | TLV | TLV information| 802.1OUI| 802.1 |Reserved| Application | 2N/A * | Type | string len | 00-80-C2|subtype | | Priority Table| 2N/A * +--------+----------------+----------+--------+------------------------+ 2N/A * 7bits 9 bits 3-octets 1-octet 8-bits Multiple of 3 octet 2N/A * Caller frees memory. 2N/A * Specifically get a specific application info from application TLV. 2N/A/* Specifically get FCoE application priority */ 2N/A/* Caller frees memory */ 2N/A /* Should have at least one application priority specified. */ 2N/A /* Move past the OUI and subtype */ 2N/A * Get the number of applications, 5 is the OUI, Subtype and Reserved, 2N/A * 3 is the size of one application priority. 2N/A /* move past the reserved byte */ 2N/A * +-----+---------------+----------+--------+-----+----+-----+---+------+ 2N/A * |TLV |TLV information| 802.1OUI| 802.1 |Will-|MBC |Reser|PFC|PFC | 2N/A * |Type | string len | 00-80-C2| subtype|ing | |ved |cap|enable| 2N/A * +-----+---------------+----------+--------+-----+----+-----+---+------+ 2N/A * 7-bits 9 bits 3 octets 1 octet 1b 1b 2b 4b 1-octet 2N/A * Should have the Willing(1b), MBC(1b), Reserved (2b), PFC Cap(4b), 2N/A /* Move past the OUI and subtype */ 2N/A /* Validate PFC : PFC can't be enabled for TCs not supported */ 2N/A for (i = 0; i <
4; i++) {
2N/A /* if we support 8 TCs then MAX TCs will be set to 0 */ 2N/A for (i = 0; i <
8; i++) {
2N/A switch ((i +
1) %
2) {
2N/A * +-----+---------------+----------+--------+----------+--+---+----+----+ 2N/A * |TLV |TLV information| 802.1OUI| 802.1 |EVB Bridge|R |RTE|EVB |ROL | 2N/A * |Type | string len | 00-80-C2| subtype|status | | |mode| | 2N/A * +-----+---------------+----------+--------+----------+--+---+----+----+ 2N/A * 7-bits 9 bits 3 octets 1 octet 1 octet 3b 5b 2b 1b 2N/A * +---+--------+---+---+ 2N/A * |RWD|Reserved|ROL|RKA| 2N/A * +---+--------+-------+ 2N/A /* Move past the OUI and subtype */ 2N/A * For unknown TLVs, just return the byte array as a string 2N/A /* convert the series of bytes into numeric string */ 2N/A * +-----+-------+-------+-------+--------+-----------+----------+------+----+ 2N/A * | TLV | TLV | mgmt. | mgmt | mgmt | interface |interface | OID | | 2N/A * | Type| info. |address|address|address | numbering | number |length| OID| 2N/A * | |length |length |subtype| | subtype | | | | 2N/A * +-----+-------+-------+-------+--------+-----------+----------+------+----+ 2N/A * 7bits 9bits 1 1 1-31 1 4 1 0-128 2N/A/* caller frees the memory */ 2N/A return (
"IPv4 Address");
2N/A return (
"IPv6 Address");
2N/A return (
"MAC address");
2N/A return (
"System Port Number");
2N/A * If `str' is non-NULL, searches the `nvl' for a particular organization 2N/A * specific tlv (i.e. tlv with a specific OUI and subtype. On the other hand 2N/A * if `str' is NULL, it returns all the unrecognized org. specific tlv in a 2N/A * `orgpp' of length `len'. 2N/A /* `arr' containes the entire 'org. specific tlv' */ 2N/A /* copy over the oui */ 2N/A /* Get the OUI list for `name2' */ 2N/A/* DCBx Appln to String functions */ 2N/A return (
"Ethertype");
2N/A return (
"Reserved");
2N/A return (
"RR Non-Enabled");
2N/A return (
"RR Enabled");
2N/A return (
"RR Unknown");