From 07aa8c5f1f13ac7eaff169cbeaef0b704de98a37 Mon Sep 17 00:00:00 2001 From: Jeff Scheel Date: Tue, 7 Apr 2020 10:04:31 -0500 Subject: [PATCH] Add H_VIOCTL subfunction for virtual ethernet MAC scan functionality Signed-off-by: Jeff Scheel --- Virtualization/ch_virtual_io.xml | 430 ++++++++++++++++++++++++++++++- 1 file changed, 422 insertions(+), 8 deletions(-) diff --git a/Virtualization/ch_virtual_io.xml b/Virtualization/ch_virtual_io.xml index 78c9fcc..0964645 100644 --- a/Virtualization/ch_virtual_io.xml +++ b/Virtualization/ch_virtual_io.xml @@ -2638,7 +2638,7 @@ hcall ( const unit64 H_VIOCTL, /* Query/Set behaviors for the virtual IOA */ - + @@ -2654,7 +2654,7 @@ hcall ( const unit64 H_VIOCTL, /* Query/Set behaviors for the virtual IOA */ - + @@ -2670,7 +2670,7 @@ hcall ( const unit64 H_VIOCTL, /* Query/Set behaviors for the virtual IOA */ - + @@ -2686,7 +2686,25 @@ hcall ( const unit64 H_VIOCTL, /* Query/Set behaviors for the virtual IOA */ - + + + + + + + 0x1C + + + ILLAN_MAC_SCAN + + + For any ILLAN adapter with the + “ibm,trunk-adapter” + property + + + + @@ -3406,7 +3424,7 @@ hcall ( const unit64 H_VIOCTL, /* Query/Set behaviors for the virtual IOA */ -
+
VNIC_SERVER_STATUS Subfunction Semantics This subfunction is used to report the status of the physical @@ -3444,7 +3462,7 @@ hcall ( const unit64 H_VIOCTL, /* Query/Set behaviors for the virtual IOA */
-
+
GET_SESSION_TOKEN Subfunction Semantics This subfunction is used to obtain a session token from a VNIC client adapter. @@ -3468,7 +3486,7 @@ hcall ( const unit64 H_VIOCTL, /* Query/Set behaviors for the virtual IOA */
-
+
SESSION_ERROR_DETECTED Subfunction Semantics This subfunction is used to report that the currently active @@ -3514,7 +3532,7 @@ hcall ( const unit64 H_VIOCTL, /* Query/Set behaviors for the virtual IOA */
-
+
GET_VNIC_SERVER_INFO Subfunction Semantics This subfunction is used to fetch information about a VNIC server @@ -3692,6 +3710,402 @@ hcall ( const unit64 H_VIOCTL, /* Query/Set behaviors for the virtual IOA */
+ +
+ ILLAN_MAC_SCAN Subfunction Semantics + + + + parm-1 is an eight byte output descriptor. The high order + byte of an output descriptor is control, the next three bytes are + a length field of the buffer in bytes, and the low order four bytes + are a TCE mapped I/O address of the start of a buffer in I/O address + space. The high order control byte must be set to zero. The TCE mapped + I/O address is mapped via the first window pane of the + “ibm,my-dma-window” + property. + + + + Parm-2 and parm-3 should be set to the opaque continuation tokens + CT1 and CT2, respectively. These values are returned by the hypervisor + through the ILLAN_MAC_SCAN Buffer header when a scan cannot be completed + within a single vioctl call. See + + for more information about the values CT1 and CT2. Parm-2 and parm-3 + should be set to zero when starting a new ILLAN_MAC_SCAN call sequence. + + + + Validate that the unit-address corresponds to an active ILLAN + trunk adapter, else return H_Parameter. + + + + Validate parm-2 and parm-3 are both set to zero, or contain + valid continuation tokens, else return H_Parameter. + + + + Validate that the I/O address range supplied by parm-1 is large + enough to hold the header information for the ILLAN_MAC_SCAN Buffer + detailed in + , + else return H_Parameter. + + + + Validate that the I/O address supplied by parm-1 is 8-byte aligned, + else return H_Parameter. + + + + If any data transfers to the I/O address range supplied by parm-1 + fail, return H_Permission. + + + + Iterate over all VLAN ids associated with the specified trunk + adapter. For each associated VLAN id: + + + + Iterate over all ILLAN adapters, barring any adapters + with the + “ibm,trunk-adapter” + property, belonging to the current VLAN id. + + + + For each non-trunk ILLAN adapter belonging to the current + VLAN id, add a 64-bit value containing the current 12-bit VLAN id + and the 48-bit MAC address of the ILLAN adapter to the next vacant + entry in the MAC/VID Buffer. Each MAC/VID pair in the buffer + is formatted as shown in + + Note that when handling H_IN_PROGRESS return codes, the caller + should either copy information from the buffer, immediately + process the information in the buffer, or modify the output + descriptor to utilize a new, non-overlapping buffer I/O address + range after each call. Otherwise, the buffer data will be overwritten + on consecutive calls. + + + + MAC/VID Pair Entry Format + + + + + + + + Field + + + Bit Offset + + + Bit Length + + + + + + + RESERVED + + + 0 + + + 4 + + + + + 802.1qVLAND ID + + + 4 + + + 12 + + + + + Adapter MAC Address + + + 16 + + + 48 + + + + +
+
+
+ + + If at any point during iteration the vioctl call exceeds + the maximum allotted time interval, or if the MAC/VID buffer + is filled to capacity, do the following: + + + + Store 'CT1' and 'CT2' in the buffer header so the + operation can be continued on the next call + + + + Set 'Num Entries' in the buffer header to the number + of valid MAC/VID pairs in the output buffer + + + + Set 'Reconfiguration Occurred' based on the rules + described in the Dynamic Reconfiguration description item below + + + + Return H_IN_PROGRESS. + + + ILLAN_MAC_SCAN Buffer Format + + + + + + + + + + + + + Field + + + Byte Offset + + + Byte Length + + + Description + + + + + + + Header + + + CT1 + + + 0 + + + 8 + + + Continuation token 1 – this value should be used as + parm-2 for sequential calls to ILLAN_MAC_SCAN when + handling H_IN_PROGRESS return codes + + + + + CT2 + + + 8 + + + 8 + + + Continuation token 2 – this value should be used + as parm-3 for sequential calls to ILLAN_MAC_SCAN when + handling H_IN_PROGRESS return codes. + + + + + Reserved + + + 16 + + + 15 + + + This field is reserved and should be set to zero. + + + + + Reconfiguration Occurred + + + 31 + + + 1 + + + + + 0: The data in this buffer is guaranteed to be + consistent with the virtual adapter configuration at + the point of return + + + 1: The data in this buffer may contain data + inconsistencies due to reconfiguration of + ILLAN adapters between consecutive calls + to ILLAN_MAC_SCAN. See + Dynamic Reconfigurations description below. + + + + + + + Num Entries + + + 32 + + + 8 + + + The number of valid 64-bit MAC/VID pairs in this buffer + + + + + Data + + + MAC/VID Buffer Start + + + 40 + + + Variable + + + A variably-sized, contiguous array of MAC/VID pairs + formatted according to + . + The number of valid entries in this array is + specified by the “Num Entries” field. + + + + +
+
+
+
+
+
+
+
+
+ + + If all MAC addresses were successfully scanned for all VLAN ids on + the trunk adapter, do the following: + + + Set 'CT1' and 'CT2' to zero in the buffer header + + + + Set 'Num Entries' in the buffer header to the number of + valid MAC/VID pairs in the output buffer + + + + Set 'Reconfiguration Occurred' based on the rules described + in the Dynamic Reconfiguration section below + + + + Return H_SUCCESS. + + + + + + + Note that the buffer headers and data are only valid if this + vioctl returns H_IN_PROGRESS or H_SUCCESS. + + + + Note that any unused buffer space outside of the range determined + by the 'Num Entries' field in the ILLAN_MAC_SCAN buffer header is + undefined by this architecture. + + + + Dynamic Reconfigurations: + If the 'Reconfiguration Occurred' field in the ILLAN_MAC_SCAN buffer + header is TRUE (1), the data in all MAC/VID buffers in a call sequence + may contain inconsistencies due to dynamic reconfiguration events for + the trunk adapter itself or any ILLAN adapters associated with the + trunk adapter. In this case, all data collected from the call sequence + should be utilized with caution, or re-queried. Possible inconsistencies + arising from dynamic reconfiguration include the following: + + + MAC addresses in the buffer may correspond to ILLAN adapters + that have been removed from the switch, due to partition suspension, + hibernation, adapter disablement, and DLPAR operations + + + + MAC addresses corresponding to ILLAN adapters that were + added to the virtual switch due to partition resumption, + adapter enablement, and DLPAR operations may not be included + in the buffer + + + + ILLAN adapters may have their VLAN memberships reconfigured, + in which case certain VID/MAC pairs in the buffer may no longer + be valid, and some valid VID/MAC pairs for ILLAN adapters may + not be included in the buffer at all. + + + + ILLAN adapters may have their MAC address reconfigured. + Both the old and new MAC addresses for the adapter may be included + in the buffer, or the old and new MAC addresses for the adapter + may not be included in the buffer at all. + + + Note that even if the value of the 'Reconfiguration Occurred' field is + FALSE (0), ILLAN adapter reconfigurations may have occurred immediately + after the vioctl completed, and the information in the buffer could be + outdated. + + +
+