diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/INetworkSwitchControl.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/INetworkSwitchControl.cs
new file mode 100644
index 00000000..ba3215fe
--- /dev/null
+++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/INetworkSwitchControl.cs
@@ -0,0 +1,122 @@
+using System;
+
+namespace PepperDash.Essentials.Core.DeviceTypeInterfaces;
+
+///
+/// Interface for network switches that support VLAN assignment on individual ports.
+///
+public interface INetworkSwitchVlanManager
+{
+ ///
+ /// Returns the current access VLAN ID configured on the port.
+ /// Return -1 when the value is unavailable (e.g. the switch has not been polled yet
+ /// or the implementation does not support VLAN queries).
+ ///
+ /// Switch port identifier
+ /// VLAN ID or -1 when unavailable
+ int GetPortCurrentVlan(string port);
+
+ ///
+ /// Changes the access VLAN of a single switch port.
+ /// The implementation is responsible for entering/exiting privileged/config mode.
+ ///
+ /// Switch port identifier (e.g. "1/0/3" for Netgear, "gi1/0/3" for Cisco)
+ /// Target VLAN ID (1-4093)
+ void SetPortVlan(string port, uint vlanId);
+}
+
+///
+/// Interface for network switches that support Power over Ethernet (PoE) control on individual ports.
+///
+public interface INetworkSwitchPoeManager
+{
+ ///
+ /// Enables or disables PoE power delivery on a single switch port.
+ /// The implementation is responsible for entering/exiting privileged/config mode.
+ ///
+ /// Switch port identifier
+ /// True to enable PoE; false to disable PoE
+ void SetPortPoeState(string port, bool enabled);
+}
+
+///
+/// Standardized interface for network switch devices that support per-port PoE control
+/// and VLAN assignment.
+///
+public interface INetworkSwitchPoeVlanManager : INetworkSwitchVlanManager, INetworkSwitchPoeManager
+{
+ ///
+ /// Event that is raised when the state of a switch port changes, such as a VLAN change or PoE state change.
+ ///
+ event EventHandler PortStateChanged;
+
+}
+
+///
+/// Event arguments for port state changes on a network switch, such as VLAN changes or PoE state changes.
+///
+public class NetworkSwitchPortEventArgs : EventArgs
+{
+ ///
+ /// The identifier of the port that changed state (e.g. "1/0/3" for Netgear, "gi1/0/3" for Cisco).
+ ///
+ public string Port { get; private set; }
+
+ ///
+ /// The type of event that occurred on the port (e.g. VLAN change, PoE enabled/disabled).
+ ///
+ public NetworkSwitchPortEventType EventType { get; private set; }
+
+ ///
+ /// Constructor for NetworkSwitchPortEventArgs
+ ///
+ /// The identifier of the port that changed state
+ /// The type of event that occurred on the port
+ public NetworkSwitchPortEventArgs(string port, NetworkSwitchPortEventType eventType)
+ {
+ Port = port;
+ EventType = eventType;
+ }
+}
+
+///
+/// Event arguments for port state changes on a network switch, such as VLAN changes or PoE state changes.
+///
+public enum NetworkSwitchPortEventType
+{
+ ///
+ /// Indicates that the type of event is unknown or cannot be determined.
+ ///
+ Unknown,
+
+ ///
+ /// Indicates that a VLAN change is in progress on the port, either through a call to SetPortVlan or an external change detected by polling.
+ ///
+ VlanChangeInProgress,
+
+ ///
+ /// Indicates that the access VLAN on a port has changed, either through a successful call to SetPortVlan
+ ///
+ VlanChanged,
+
+ ///
+ /// Indicates that PoE is being disabled on the port, either through a call to SetPortPoeState or an external change detected by polling.
+ ///
+ PoeDisableInProgress,
+
+ ///
+ /// Indicates that the PoE state on a port has changed, either through a successful call to SetPortPoeState
+ ///
+ PoEDisabled,
+
+ ///
+ /// Indicates that PoE is being enabled on the port, either through a call to SetPortPoeState or an external change detected by polling.
+ ///
+ PoeEnableInProgress,
+
+ ///
+ /// Indicates that the PoE state on a port has changed, either through a successful call to SetPortPoeState
+ ///
+ PoEEnabled
+}
+