Skip to content

Support for UMF Interfaces Model - Front Panel Interfaces#229

Draft
aliyahhoda wants to merge 1 commit into
sonic-net:masterfrom
aliyahhoda:pr_intfmodel_frontpanel
Draft

Support for UMF Interfaces Model - Front Panel Interfaces#229
aliyahhoda wants to merge 1 commit into
sonic-net:masterfrom
aliyahhoda:pr_intfmodel_frontpanel

Conversation

@aliyahhoda

Copy link
Copy Markdown

Support for UMF Interfaces Model - Front Panel Interfaces

@mssonicbld

Copy link
Copy Markdown

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@aliyahhoda aliyahhoda force-pushed the pr_intfmodel_frontpanel branch from 9e4aed3 to 7b6ea0d Compare July 7, 2026 10:33
@mssonicbld

Copy link
Copy Markdown

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@aliyahhoda aliyahhoda force-pushed the pr_intfmodel_frontpanel branch from 7b6ea0d to e3afe8c Compare July 7, 2026 11:02
@mssonicbld

Copy link
Copy Markdown

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines will not run the associated pipelines, because the pull request was updated after the run command was issued. Review the pull request again and issue a new run command.

@aliyahhoda aliyahhoda force-pushed the pr_intfmodel_frontpanel branch from e3afe8c to 2a34ca1 Compare July 7, 2026 11:08
@mssonicbld

Copy link
Copy Markdown

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@aliyahhoda aliyahhoda force-pushed the pr_intfmodel_frontpanel branch from 2a34ca1 to 75f5d4f Compare July 7, 2026 12:12
@mssonicbld

Copy link
Copy Markdown

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@aliyahhoda

aliyahhoda commented Jul 7, 2026

Copy link
Copy Markdown
Author

Support for UMF Front Panel Interfaces

config/id (P4RT id)
state/id
state/hardware-port
state/physical-channel
state/transceiver
state/counters/in-fcs-errors

Unit Testing Result
File: translib/transformer/xfmr_intf_test.go
=== RUN TestInvalidInterfaceType_FieldXfmrDbtoYang
=== RUN TestInvalidInterfaceType_FieldXfmrDbtoYang/DbToYang_intf_hardware_port_xfmr
=== RUN TestInvalidInterfaceType_FieldXfmrDbtoYang/DbToYang_intf_transceiver_xfmr
=== RUN TestInvalidInterfaceType_FieldXfmrDbtoYang/DbToYang_intf_physical_channel_xfmr
=== RUN TestInvalidInterfaceType_FieldXfmrDbtoYang/DbToYang_pins_if_id_xfmr
=== RUN TestInvalidInterfaceType_FieldXfmrDbtoYang/DbToYangPath_intf_get_counters_path_xfmr
--- PASS: TestInvalidInterfaceType_FieldXfmrDbtoYang (0.00s)
--- PASS: TestInvalidInterfaceType_FieldXfmrDbtoYang/DbToYang_intf_hardware_port_xfmr (0.00s)
--- PASS: TestInvalidInterfaceType_FieldXfmrDbtoYang/DbToYang_intf_transceiver_xfmr (0.00s)
--- PASS: TestInvalidInterfaceType_FieldXfmrDbtoYang/DbToYang_intf_physical_channel_xfmr (0.00s)
--- PASS: TestInvalidInterfaceType_FieldXfmrDbtoYang/DbToYang_pins_if_id_xfmr (0.00s)
--- PASS: TestInvalidInterfaceType_FieldXfmrDbtoYang/DbToYangPath_intf_get_counters_path_xfmr (0.00s)
=== RUN TestInvalidInterfaceType_SubTreeXfmrDbToYang
=== RUN TestInvalidInterfaceType_SubTreeXfmrDbToYang/DbToYang_intf_get_counters_xfmr
--- PASS: TestInvalidInterfaceType_SubTreeXfmrDbToYang (0.00s)
--- PASS: TestInvalidInterfaceType_SubTreeXfmrDbToYang/DbToYang_intf_get_counters_xfmr (0.00s)
=== RUN TestInvalidInterfaceType_YangToDb
=== RUN TestInvalidInterfaceType_YangToDb/YangToDb_pins_if_id_xfmr
--- PASS: TestInvalidInterfaceType_YangToDb (0.00s)
--- PASS: TestInvalidInterfaceType_YangToDb/YangToDb_pins_if_id_xfmr (0.00s)
=== RUN TestDbToYang_intf_hardware_port_xfmr
=== RUN TestDbToYang_intf_hardware_port_xfmr/Success_Path
=== RUN TestDbToYang_intf_hardware_port_xfmr/Error_Path_Trigger_Missing_DB
--- PASS: TestDbToYang_intf_hardware_port_xfmr (0.00s)
--- PASS: TestDbToYang_intf_hardware_port_xfmr/Success_Path (0.00s)
--- PASS: TestDbToYang_intf_hardware_port_xfmr/Error_Path_Trigger_Missing_DB (0.00s)
=== RUN TestDbToYang_intf_transceiver_xfmr
=== RUN TestDbToYang_intf_transceiver_xfmr/Success_Path
=== RUN TestDbToYang_intf_transceiver_xfmr/Error_Path_Trigger_Missing_DB
--- PASS: TestDbToYang_intf_transceiver_xfmr (0.00s)
--- PASS: TestDbToYang_intf_transceiver_xfmr/Success_Path (0.00s)
--- PASS: TestDbToYang_intf_transceiver_xfmr/Error_Path_Trigger_Missing_DB (0.00s)
=== RUN TestDbToYangPath_intf_path_xfmr
=== RUN TestDbToYangPath_intf_path_xfmr/Success_-Valid_Single_Component_Key(Ethernet202)
=== RUN TestDbToYangPath_intf_path_xfmr/Success_-Valid_Single_Component_Key(PortChannel10)
=== RUN TestDbToYangPath_intf_path_xfmr/Failure_-Empty_Table_Key_Components_List
=== RUN TestDbToYangPath_intf_path_xfmr/Failure
-Multi_Component_Composite_Key
--- PASS: TestDbToYangPath_intf_path_xfmr (0.00s)
--- PASS: TestDbToYangPath_intf_path_xfmr/Success
-Valid_Single_Component_Key(Ethernet202) (0.00s)
--- PASS: TestDbToYangPath_intf_path_xfmr/Success_-Valid_Single_Component_Key(PortChannel10) (0.00s)
--- PASS: TestDbToYangPath_intf_path_xfmr/Failure_-Empty_Table_Key_Components_List (0.00s)
--- PASS: TestDbToYangPath_intf_path_xfmr/Failure
-Multi_Component_Composite_Key (0.00s)
=== RUN TestDbToYang_pins_if_id_xfmr
=== RUN TestDbToYang_pins_if_id_xfmr/Failure
-Invalid_Interface_Identifier
=== RUN TestDbToYang_pins_if_id_xfmr/Failure
-Invalid_ID_Value_String_in_DB
=== RUN TestDbToYang_pins_if_id_xfmr/Failure
-ID_Field_Missing_from_DB_Entry
=== RUN TestDbToYang_pins_if_id_xfmr/Failure
-DB_Connection_Error
=== RUN TestDbToYang_pins_if_id_xfmr/Success
-Valid_ID_in_ConfigDB
=== RUN TestDbToYang_pins_if_id_xfmr/Success
-Valid_ID_in_ApplDB
=== RUN TestDbToYang_pins_if_id_xfmr/Success
-Valid_ID_in_StateDB
--- PASS: TestDbToYang_pins_if_id_xfmr (0.00s)
--- PASS: TestDbToYang_pins_if_id_xfmr/Failure
-Invalid_Interface_Identifier (0.00s)
--- PASS: TestDbToYang_pins_if_id_xfmr/Failure
-Invalid_ID_Value_String_in_DB (0.00s)
--- PASS: TestDbToYang_pins_if_id_xfmr/Failure
-ID_Field_Missing_from_DB_Entry (0.00s)
--- PASS: TestDbToYang_pins_if_id_xfmr/Failure
-DB_Connection_Error (0.00s)
--- PASS: TestDbToYang_pins_if_id_xfmr/Success
-Valid_ID_in_ConfigDB (0.00s)
--- PASS: TestDbToYang_pins_if_id_xfmr/Success
-Valid_ID_in_ApplDB (0.00s)
--- PASS: TestDbToYang_pins_if_id_xfmr/Success
-Valid_ID_in_StateDB (0.00s)
=== RUN TestYangToDb_pins_if_id_xfmr
=== RUN TestYangToDb_pins_if_id_xfmr/Success
-Valid_Ethernet_ID_Parsed_to_String
=== RUN TestYangToDb_pins_if_id_xfmr/Success
-Edge_Case_Zero_ID_Parsed_to_String
=== RUN TestYangToDb_pins_if_id_xfmr/Failure
-Interface_KEY_Not_Present_in_URI
=== RUN TestYangToDb_pins_if_id_xfmr/Failure
-Invalid_Interface_Identifier_Syntax
=== RUN TestYangToDb_pins_if_id_xfmr/Failure
-Unsupported_Interface_Type(Vlan)
=== RUN TestYangToDb_pins_if_id_xfmr/Failure_-Param_is_Nil_Pointer
=== RUN TestYangToDb_pins_if_id_xfmr/Failure
-Param_Type_Type-Assertion_Mismatch
--- PASS: TestYangToDb_pins_if_id_xfmr (0.00s)
--- PASS: TestYangToDb_pins_if_id_xfmr/Success
-Valid_Ethernet_ID_Parsed_to_String (0.00s)
--- PASS: TestYangToDb_pins_if_id_xfmr/Success
-Edge_Case_Zero_ID_Parsed_to_String (0.00s)
--- PASS: TestYangToDb_pins_if_id_xfmr/Failure
-Interface_KEY_Not_Present_in_URI (0.00s)
--- PASS: TestYangToDb_pins_if_id_xfmr/Failure
-Invalid_Interface_Identifier_Syntax (0.00s)
--- PASS: TestYangToDb_pins_if_id_xfmr/Failure
-Unsupported_Interface_Type(Vlan) (0.00s)
--- PASS: TestYangToDb_pins_if_id_xfmr/Failure_-Param_is_Nil_Pointer (0.00s)
--- PASS: TestYangToDb_pins_if_id_xfmr/Failure
-Param_Type_Type-Assertion_Mismatch (0.00s)
=== RUN TestGetPortIndex
=== RUN TestGetPortIndex/Success
-Valid_Path
=== RUN TestGetPortIndex/Error_1
-Invalid_Interface_Name_Syntax
=== RUN TestGetPortIndex/Error_2
-Not_IntfTypeEthernet
=== RUN TestGetPortIndex/Error_3
-Entry_does_not_Exist
=== RUN TestGetPortIndex/Error_4
-DB_Read_Error_or_Entry_Missing
=== RUN TestGetPortIndex/Error_5
-Index_Field_Missing_in_DB_Entry
--- PASS: TestGetPortIndex (0.00s)
--- PASS: TestGetPortIndex/Success
-Valid_Path (0.00s)
--- PASS: TestGetPortIndex/Error_1
-Invalid_Interface_Name_Syntax (0.00s)
--- PASS: TestGetPortIndex/Error_2
-Not_IntfTypeEthernet (0.00s)
--- PASS: TestGetPortIndex/Error_3
-Entry_does_not_Exist (0.00s)
--- PASS: TestGetPortIndex/Error_4
-DB_Read_Error_or_Entry_Missing (0.00s)
--- PASS: TestGetPortIndex/Error_5
-Index_Field_Missing_in_DB_Entry (0.00s)
=== RUN TestDbToYang_intf_get_counters_xfmr
=== RUN TestDbToYang_intf_get_counters_xfmr/Success
-Populate_Counters_Core_Callback_Execution
=== RUN TestDbToYang_intf_get_counters_xfmr/Success
-Pre-existing_Interfaces_Subtree_Match_Branch
=== RUN TestDbToYang_intf_get_counters_xfmr/Success
-Redundant_Target_URI_Path_Branch_Coverage
=== RUN TestDbToYang_intf_get_counters_xfmr/Failure
-Invalid_Interface_Type_Branch_Coverage
=== RUN TestDbToYang_intf_get_counters_xfmr/Success
-Counters_Callback_Not_Supported_Branch_Coverage
=== RUN TestDbToYang_intf_get_counters_xfmr/Success
-Interface_Not_Found_In_Existing_Map_Coverage
=== RUN TestDbToYang_intf_get_counters_xfmr/Success
-Nil_State_Component_Verification_Branch_Coverage
--- PASS: TestDbToYang_intf_get_counters_xfmr (0.00s)
--- PASS: TestDbToYang_intf_get_counters_xfmr/Success
-Populate_Counters_Core_Callback_Execution (0.00s)
--- PASS: TestDbToYang_intf_get_counters_xfmr/Success
-Pre-existing_Interfaces_Subtree_Match_Branch (0.00s)
--- PASS: TestDbToYang_intf_get_counters_xfmr/Success
-Redundant_Target_URI_Path_Branch_Coverage (0.00s)
--- PASS: TestDbToYang_intf_get_counters_xfmr/Failure
-Invalid_Interface_Type_Branch_Coverage (0.00s)
--- PASS: TestDbToYang_intf_get_counters_xfmr/Success
-Counters_Callback_Not_Supported_Branch_Coverage (0.00s)
--- PASS: TestDbToYang_intf_get_counters_xfmr/Success
-Interface_Not_Found_In_Existing_Map_Coverage (0.00s)
--- PASS: TestDbToYang_intf_get_counters_xfmr/Success
-Nil_State_Component_Verification_Branch_Coverage (0.00s)
=== RUN TestSubscribe_intf_get_counters_xfmr
=== RUN TestSubscribe_intf_get_counters_xfmr/Success
-Specific_Interface_Key_Subscription_Mapping
xfmr_intf_test.go:942: Successfully verified interface entry inside table: PORT
=== RUN TestSubscribe_intf_get_counters_xfmr/Failure
-Invalid_Interface_String_Target
=== RUN TestSubscribe_intf_get_counters_xfmr/Success
-Wildcard_Interface_Pattern_Expansion_Mapping
--- PASS: TestSubscribe_intf_get_counters_xfmr (0.00s)
--- PASS: TestSubscribe_intf_get_counters_xfmr/Success
-Specific_Interface_Key_Subscription_Mapping (0.00s)
--- PASS: TestSubscribe_intf_get_counters_xfmr/Failure
-Invalid_Interface_String_Target (0.00s)
--- PASS: TestSubscribe_intf_get_counters_xfmr/Success
-Wildcard_Interface_Pattern_Expansion_Mapping (0.00s)
=== RUN TestGetSpecificCounterAttr_InFcsErrors
=== RUN TestGetSpecificCounterAttr_InFcsErrors/Success
-Hit_InFcsErrors_Target_Case_Branch
=== RUN TestGetSpecificCounterAttr_InFcsErrors/Success
-Fallthrough_to_Default_Path_Unhandled
--- PASS: TestGetSpecificCounterAttr_InFcsErrors (0.00s)
--- PASS: TestGetSpecificCounterAttr_InFcsErrors/Success
-Hit_InFcsErrors_Target_Case_Branch (0.00s)
--- PASS: TestGetSpecificCounterAttr_InFcsErrors/Success
-Fallthrough_to_Default_Path_Unhandled (0.00s)
=== RUN TestSubscribe_intf_get_ether_counters_xfmr
=== RUN TestSubscribe_intf_get_ether_counters_xfmr/Success
-Specific_Interface_Extraction_Path
=== RUN TestSubscribe_intf_get_ether_counters_xfmr/Success
-Fallback_to_Wildcard_Expansion_when_Name_is_Empty
--- PASS: TestSubscribe_intf_get_ether_counters_xfmr (0.00s)
--- PASS: TestSubscribe_intf_get_ether_counters_xfmr/Success
-Specific_Interface_Extraction_Path (0.00s)
--- PASS: TestSubscribe_intf_get_ether_counters_xfmr/Success
-Fallback_to_Wildcard_Expansion_when_Name_is_Empty (0.00s)
=== RUN TestDbToYang_intf_physical_channel_xfmr
=== RUN TestDbToYang_intf_physical_channel_xfmr/Failure
-Invalid_Interface_Name_Syntax
=== RUN TestDbToYang_intf_physical_channel_xfmr/Failure
-Interface_Type_is_Not_Ethernet(PortChannel)
=== RUN TestDbToYang_intf_physical_channel_xfmr/Failure_-Lanes_Field_Missing_from_DB_Entry
=== RUN TestDbToYang_intf_physical_channel_xfmr/Failure
-Transceiver_Type_Field_Missing_in_StateDB
=== RUN TestDbToYang_intf_physical_channel_xfmr/Failure
-Unknown_Transceiver_Type_Map_Lookup_Match
=== RUN TestDbToYang_intf_physical_channel_xfmr/Failure
-DB_Connection_Error
=== RUN TestDbToYang_intf_physical_channel_xfmr/Failure
-Port_Index_Field_Missing_from_DB
=== RUN TestDbToYang_intf_physical_channel_xfmr/Failure
-Transceiver_Entry_Missing_from_StateDB
--- PASS: TestDbToYang_intf_physical_channel_xfmr (0.00s)
--- PASS: TestDbToYang_intf_physical_channel_xfmr/Failure
-Invalid_Interface_Name_Syntax (0.00s)
--- PASS: TestDbToYang_intf_physical_channel_xfmr/Failure
-Interface_Type_is_Not_Ethernet(PortChannel) (0.00s)
--- PASS: TestDbToYang_intf_physical_channel_xfmr/Failure_-Lanes_Field_Missing_from_DB_Entry (0.00s)
--- PASS: TestDbToYang_intf_physical_channel_xfmr/Failure
-Transceiver_Type_Field_Missing_in_StateDB (0.00s)
--- PASS: TestDbToYang_intf_physical_channel_xfmr/Failure
-Unknown_Transceiver_Type_Map_Lookup_Match (0.00s)
--- PASS: TestDbToYang_intf_physical_channel_xfmr/Failure
-DB_Connection_Error (0.00s)
--- PASS: TestDbToYang_intf_physical_channel_xfmr/Failure
-Port_Index_Field_Missing_from_DB (0.00s)
--- PASS: TestDbToYang_intf_physical_channel_xfmr/Failure
-_Transceiver_Entry_Missing_from_StateDB (0.00s)

File: translib/platform/platform_test.go

=== RUN TestMissingJsonFile
--- PASS: TestMissingJsonFile (0.00s)
=== RUN TestParseThisThenThatFallback
--- PASS: TestParseThisThenThatFallback (0.00s)
=== RUN TestMalformedHwskuJsonFile
--- PASS: TestMalformedHwskuJsonFile (0.00s)
=== RUN TestMalformedJsonFile
--- PASS: TestMalformedJsonFile (0.00s)
=== RUN TestMalformedIntfName
--- PASS: TestMalformedIntfName (0.00s)
=== RUN TestMalformedIndex
--- PASS: TestMalformedIndex (0.00s)
=== RUN TestMalformedBrkoutMode
--- PASS: TestMalformedBrkoutMode (0.00s)
=== RUN TestMalformedLanes
--- PASS: TestMalformedLanes (0.00s)
=== RUN TestMalformedPrimary
--- PASS: TestMalformedPrimary (0.00s)
=== RUN TestMalformedAlias
--- PASS: TestMalformedAlias (0.00s)
=== RUN TestSanitizeBreakoutMode
--- PASS: TestSanitizeBreakoutMode (0.00s)
=== RUN TestBrkoutModeToSpeeds
--- PASS: TestBrkoutModeToSpeeds (0.00s)
=== RUN TestPlatIntfAlias
--- PASS: TestPlatIntfAlias (0.00s)
=== RUN TestDoParsePlatformJsonSonic_Success
--- PASS: TestDoParsePlatformJsonSonic_Success (0.00s)
=== RUN TestDoParsePlatformJsonSonic_MalformedName
--- PASS: TestDoParsePlatformJsonSonic_MalformedName (0.00s)
=== RUN TestChannelOffset
=== RUN TestChannelOffset/ValidInterface
=== RUN TestChannelOffset/InvalidInterface
--- PASS: TestChannelOffset (0.00s)
--- PASS: TestChannelOffset/ValidInterface (0.00s)
--- PASS: TestChannelOffset/InvalidInterface (0.00s)
=== RUN TestHwskuParsing
--- PASS: TestHwskuParsing (0.00s)
PASS
coverage: 82.6% of statements in ../translib/platform

@aliyahhoda aliyahhoda force-pushed the pr_intfmodel_frontpanel branch from 75f5d4f to 9dc3a0a Compare July 7, 2026 17:51
@mssonicbld

Copy link
Copy Markdown

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@aliyahhoda aliyahhoda force-pushed the pr_intfmodel_frontpanel branch from 9dc3a0a to d0fafff Compare July 8, 2026 18:43
@mssonicbld

Copy link
Copy Markdown

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment thread translib/transformer/xfmr_intf.go Outdated
* populate most fields. */
platformCfg = platformConfig{}
platformCfg.intfs = map[string]*platformIntf{}
intfsJson := parsedJson["interfaces"].(map[string]any)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I notice that platform.go uses several unchecked type assertions on parsed JSON (.(map[string]any), .(map[string]interface{}), .([]interface{})). Could we avoid direct type assertion and use checked assertions (v, ok := ...) and return descriptive InvalidArgs/tlerr.New errors instead of crashing?
Same pattern appears in a few other places in this file:
• parsedJson["interfaces"].(map[string]any)
• interface-entry casts in both legacy and sonic parsing paths
• primary-entry cast in second pass
• breakout_modes map cast
• breakout mode members cast to []interface{}

Comment thread translib/transformer/xfmr_intf_test.go Outdated
Comment thread translib/transformer/xfmr_intf.go Outdated
var intfToDefaultMode = map[string]string{} // from hwsku.json

/* Functions */
func init() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

platform currently performs file parsing and global state mutation in init(). This introduces import-time side effects, makes tests order-sensitive, and obscures initialization failure handling. Can we switch to explicit lazy initialization (ensureLoaded() with sync.Once) and return errors at call sites? That keeps startup deterministic, improves testability, and avoids hidden global-state coupling.
e.g.

var (
    cfg platformConfig
    initErr error
    once sync.Once
)

func ensureLoaded() error {
    once.Do(func() {
        initErr = loadAll() // parse files, validate, then assign cfg
    })
    return initErr
}

Then every public accessor calls ensureLoaded() first.

return true, nil
}

func doParsePlatformJson(filename string) error {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doParsePlatformJson and doParsePlatformJsonSonic share massive blocks of nearly identical code. Can you make common sections extracted into shared helper functions?

Comment thread models/yang/openconfig-p4rt.yang Outdated
Comment thread models/yang/openconfig-p4rt.yang Outdated
needCache: true,
onChange: OnchangeDisable,
dbDataMap: make(RedisDbSubscribeMap),
nOpts: &notificationOpts{mInterval: 1, pType: Sample}, // Counters can only support Sample.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Subscribe_intf_get_counters_xfmr has been significantly refactored:

• Before: Used COUNTERS_PORT_NAME_MAP from CountersDB, with 30s sample interval
• After: Uses config DB tables (PORT, etc.) with 1s sample interval

This is a significant behavioral change that could impact subscription performance. The sample interval dropped from 30s to 1s, which is a 30x increase in polling frequency. The comment says "Counters can only support Sample" but doesn't explain why the interval changed so drastically.


var Subscribe_intf_get_ether_counters_xfmr SubTreeXfmrSubscribe = func(inParams XfmrSubscInParams) (XfmrSubscOutParams, error) {
return Subscribe_intf_get_counters_xfmr(inParams)
log.Info("Entering Subscribe_intf_get_ether_counters_xfmr")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previously this called Subscribe_intf_get_counters_xfmr directly. Now it has its own separate implementation. This means future changes to counter subscription logic need to be applied in two places.

Signed-off-by: Aliyah Hoda <ahoda@google.com>
@aliyahhoda aliyahhoda force-pushed the pr_intfmodel_frontpanel branch from d0fafff to ec7dab0 Compare July 10, 2026 06:24
@mssonicbld

Copy link
Copy Markdown

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants