€•EŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ'/translations/zh_CN/networking/phy-port”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/zh_TW/networking/phy-port”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/it_IT/networking/phy-port”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ja_JP/networking/phy-port”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ko_KR/networking/phy-port”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/pt_BR/networking/phy-port”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/sp_SP/networking/phy-port”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒA/var/lib/git/docbuild/linux/Documentation/networking/phy-port.rst”h´KubhŒtarget”“”)”}”(hŒ .. _phy_port:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œphy-port”uh1hÈh´Khhh²hh³hÇubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒEthernet ports”h]”hŒEthernet ports”…””}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhØh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒ…This document is a basic description of the phy_port infrastructure, introduced to represent physical interfaces of Ethernet devices.”h]”hŒ…This document is a basic description of the phy_port infrastructure, introduced to represent physical interfaces of Ethernet devices.”…””}”(hhíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhhØh²hubhì)”}”(hŒìWithout phy_port, we already have quite a lot of information about what the media-facing interface of a NIC can do and looks like, through the :c:type:`struct ethtool_link_ksettings ` attributes, which includes :”h]”(hŒWithout phy_port, we already have quite a lot of information about what the media-facing interface of a NIC can do and looks like, through the ”…””}”(hhûh²hh³Nh´Nubh)”}”(hŒ@:c:type:`struct ethtool_link_ksettings `”h]”hŒliteral”“”)”}”(hjh]”hŒstruct ethtool_link_ksettings”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-type”eh"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œnetworking/phy-port”Œ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ reftarget”Œethtool_link_ksettings”uh1hh³hÇh´K hhûubhŒ attributes, which includes :”…””}”(hhûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K hhØh²hubhŒ block_quote”“”)”}”(hŒÇ- What the NIC can do through the :c:member:`supported` field - What the Link Partner advertises through :c:member:`lp_advertising` - Which features we're advertising through :c:member:`advertising` ”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ;What the NIC can do through the :c:member:`supported` field”h]”hì)”}”(hjAh]”(hŒ What the NIC can do through the ”…””}”(hjCh²hh³Nh´Nubh)”}”(hŒ:c:member:`supported`”h]”j)”}”(hjLh]”hŒ supported”…””}”(hjNh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-member”eh"]”h$]”h&]”uh1jhjJubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jŒreftype”Œmember”Œ refexplicit”‰Œrefwarn”‰j&Œ supported”uh1hh³hÇh´KhjCubhŒ field”…””}”(hjCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Khj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj:ubj>)”}”(hŒCWhat the Link Partner advertises through :c:member:`lp_advertising`”h]”hì)”}”(hj{h]”(hŒ)What the Link Partner advertises through ”…””}”(hj}h²hh³Nh´Nubh)”}”(hŒ:c:member:`lp_advertising`”h]”j)”}”(hj†h]”hŒlp_advertising”…””}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-member”eh"]”h$]”h&]”uh1jhj„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jŒreftype”Œmember”Œ refexplicit”‰Œrefwarn”‰j&Œlp_advertising”uh1hh³hÇh´Khj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Khjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj:ubj>)”}”(hŒAWhich features we're advertising through :c:member:`advertising` ”h]”hì)”}”(hŒ@Which features we're advertising through :c:member:`advertising`”h]”(hŒ+Which features we’re advertising through ”…””}”(hj³h²hh³Nh´Nubh)”}”(hŒ:c:member:`advertising`”h]”j)”}”(hj½h]”hŒ advertising”…””}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”(jjŒc-member”eh"]”h$]”h&]”uh1jhj»ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jŒreftype”Œmember”Œ refexplicit”‰Œrefwarn”‰j&Œ advertising”uh1hh³hÇh´Khj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Khj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hj:ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j8h³hÇh´Khj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j2h³hÇh´KhhØh²hubhì)”}”(hŒ¶We also have info about the number of pairs and the PORT type. These settings are built by aggregating together information reported by various devices that are sitting on the link :”h]”hŒ¶We also have info about the number of pairs and the PORT type. These settings are built by aggregating together information reported by various devices that are sitting on the link :”…””}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhhØh²hubj3)”}”(hX- The NIC itself, through the :c:member:`get_link_ksettings` callback - Precise information from the MAC and PCS by using phylink in the MAC driver - Information reported by the PHY device - Information reported by an SFP module (which can itself include a PHY) ”h]”j9)”}”(hhh]”(j>)”}”(hŒCThe NIC itself, through the :c:member:`get_link_ksettings` callback”h]”hì)”}”(hj h]”(hŒThe NIC itself, through the ”…””}”(hj h²hh³Nh´Nubh)”}”(hŒ:c:member:`get_link_ksettings`”h]”j)”}”(hjh]”hŒget_link_ksettings”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jjŒc-member”eh"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j Œ refdomain”jŒreftype”Œmember”Œ refexplicit”‰Œrefwarn”‰j&Œget_link_ksettings”uh1hh³hÇh´Khj ubhŒ callback”…””}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjubj>)”}”(hŒKPrecise information from the MAC and PCS by using phylink in the MAC driver”h]”hì)”}”(hjEh]”hŒKPrecise information from the MAC and PCS by using phylink in the MAC driver”…””}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjubj>)”}”(hŒ&Information reported by the PHY device”h]”hì)”}”(hj\h]”hŒ&Information reported by the PHY device”…””}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjubj>)”}”(hŒGInformation reported by an SFP module (which can itself include a PHY) ”h]”hì)”}”(hŒFInformation reported by an SFP module (which can itself include a PHY)”h]”hŒFInformation reported by an SFP module (which can itself include a PHY)”…””}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Khjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j=hjubeh}”(h]”h ]”h"]”h$]”h&]”jìjíuh1j8h³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j2h³hÇh´KhhØh²hubhì)”}”(hXgThis model however starts showing its limitations when we consider devices that have more than one media interface. In such a case, only information about the actively used interface is reported, and it's not possible to know what the other interfaces can do. In fact, we have very little information about whether or not there are any other media interfaces.”h]”hXiThis model however starts showing its limitations when we consider devices that have more than one media interface. In such a case, only information about the actively used interface is reported, and it’s not possible to know what the other interfaces can do. In fact, we have very little information about whether or not there are any other media interfaces.”…””}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhhØh²hubhì)”}”(hŒÅThe goal of the phy_port representation is to provide a way of representing a physical interface of a NIC, regardless of what is driving the port (NIC through a firmware, SFP module, Ethernet PHY).”h]”hŒÅThe goal of the phy_port representation is to provide a way of representing a physical interface of a NIC, regardless of what is driving the port (NIC through a firmware, SFP module, Ethernet PHY).”…””}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K#hhØh²hubh×)”}”(hhh]”(hÜ)”}”(hŒMulti-port interfaces examples”h]”hŒMulti-port interfaces examples”…””}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj±h²hh³hÇh´K(ubhì)”}”(hŒASeveral cases of multi-interface NICs have been observed so far :”h]”hŒASeveral cases of multi-interface NICs have been observed so far :”…””}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K*hj±h²hubhì)”}”(hŒInternal MII Mux::”h]”hŒInternal MII Mux:”…””}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K,hj±h²hubhŒ literal_block”“”)”}”(hŒñ+------------------+ | SoC | | +-----+ | +-----+ | +-----+ | |-------------| PHY | | | MAC |--| Mux | | +-----+ +-----+ | +-----+ | |-----| SFP | | +-----+ | +-----+ +------------------+”h]”hŒñ+------------------+ | SoC | | +-----+ | +-----+ | +-----+ | |-------------| PHY | | | MAC |--| Mux | | +-----+ +-----+ | +-----+ | |-----| SFP | | +-----+ | +-----+ +------------------+”…””}”hjàsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÞh³hÇh´K.hj±h²hubhì)”}”(hŒ Internal Mux with internal PHY::”h]”hŒInternal Mux with internal PHY:”…””}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K7hj±h²hubjß)”}”(hŒõ+------------------------+ | SoC | | +-----+ +-----+ | +-----+ | |-| PHY | | | MAC |--| Mux | +-----+ +-----+ | +-----+ | |-----------| SFP | | +-----+ | +-----+ +------------------------+”h]”hŒõ+------------------------+ | SoC | | +-----+ +-----+ | +-----+ | |-| PHY | | | MAC |--| Mux | +-----+ +-----+ | +-----+ | |-----------| SFP | | +-----+ | +-----+ +------------------------+”…””}”hjüsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÞh³hÇh´K9hj±h²hubhì)”}”(hŒExternal Mux::”h]”hŒ External Mux:”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KBhj±h²hubjß)”}”(hŒï+---------+ | SoC | +-----+ +-----+ | | | |--| PHY | | +-----+ | | | +-----+ | | MAC |----| Mux | +-----+ | +-----+ | | |--| PHY | | | +-----+ +-----+ | | | | GPIO-------+ +---------+”h]”hŒï+---------+ | SoC | +-----+ +-----+ | | | |--| PHY | | +-----+ | | | +-----+ | | MAC |----| Mux | +-----+ | +-----+ | | |--| PHY | | | +-----+ +-----+ | | | | GPIO-------+ +---------+”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÞh³hÇh´KDhj±h²hubhì)”}”(hŒDouble-port PHY::”h]”hŒDouble-port PHY:”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KOhj±h²hubjß)”}”(hŒ©+---------+ | SoC | +-----+ | | | |--- RJ45 | +-----+ | | | | | MAC |---| PHY | +-----+ | +-----+ | | |---| SFP | +---------+ +-----+ +-----+”h]”hŒ©+---------+ | SoC | +-----+ | | | |--- RJ45 | +-----+ | | | | | MAC |---| PHY | +-----+ | +-----+ | | |---| SFP | +---------+ +-----+ +-----+”…””}”hj4sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÞh³hÇh´KQhj±h²hubhì)”}”(hXphy_port aims at providing a path to support all the above topologies, by representing the media interfaces in a way that's agnostic to what's driving the interface. the struct phy_port object has its own set of callback ops, and will eventually be able to report its own ksettings::”h]”hXphy_port aims at providing a path to support all the above topologies, by representing the media interfaces in a way that’s agnostic to what’s driving the interface. the struct phy_port object has its own set of callback ops, and will eventually be able to report its own ksettings:”…””}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KYhj±h²hubjß)”}”(hŒÔ _____ +------+ ( )-----| Port | +-----+ ( ) +------+ | MAC |--( ??? ) +-----+ ( ) +------+ (_____)-----| Port | +------+”h]”hŒÔ _____ +------+ ( )-----| Port | +-----+ ( ) +------+ | MAC |--( ??? ) +-----+ ( ) +------+ (_____)-----| Port | +------+”…””}”hjPsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÞh³hÇh´K^hj±h²hubeh}”(h]”Œmulti-port-interfaces-examples”ah ]”h"]”Œmulti-port interfaces examples”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K(ubh×)”}”(hhh]”(hÜ)”}”(hŒ Next steps”h]”hŒ Next steps”…””}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjfh²hh³hÇh´Kgubhì)”}”(hXAs of writing this documentation, only ports controlled by PHY devices are supported. The next steps will be to add the Netlink API to expose these to userspace and add support for raw ports (controlled by some firmware, and directly managed by the NIC driver).”h]”hXAs of writing this documentation, only ports controlled by PHY devices are supported. The next steps will be to add the Netlink API to expose these to userspace and add support for raw ports (controlled by some firmware, and directly managed by the NIC driver).”…””}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Kihjfh²hubhì)”}”(hŒ}Another parallel task is the introduction of a MII muxing framework to allow the control of non-PHY driver multi-port setups.”h]”hŒ}Another parallel task is the introduction of a MII muxing framework to allow the control of non-PHY driver multi-port setups.”…””}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Knhjfh²hubeh}”(h]”Œ next-steps”ah ]”h"]”Œ next steps”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Kgubeh}”(h]”(Œethernet-ports”hÕeh ]”h"]”(Œethernet ports”Œphy_port”eh$]”h&]”uh1hÖhhh²hh³hÇh´KŒexpect_referenced_by_name”}”j¡hÊsŒexpect_referenced_by_id”}”hÕhÊsubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hÛNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jËŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”hÕ]”hÊasŒnameids”}”(j¡hÕj jjcj`j˜j•uŒ nametypes”}”(j¡ˆj ‰jc‰j˜‰uh}”(hÕhØjhØj`j±j•jfuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)”}”(hhh]”hì)”}”(hhh]”hŒ.Hyperlink target "phy-port" is not referenced.”…””}”hj5sbah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj2ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1j0ubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.