Skip to main content

Ethernet Interface

The EthernetInterface class manages ethernet interface objects in Palo Alto Networks' Strata Cloud Manager. Ethernet interfaces support three modes: Layer 2, Layer 3, and TAP. Layer 3 mode supports static IP, DHCP, or PPPoE addressing. The class provides methods for CRUD operations and enforces container requirements using folder, snippet, or device parameters.

Class Overview

from scm.client import Scm

# Initialize client
client = Scm(
client_id="your_client_id",
client_secret="your_client_secret",
tsg_id="your_tsg_id"
)

# Access ethernet interfaces via the client
ethernet_interfaces = client.ethernet_interface
MethodDescriptionParametersReturn Type
create()Creates a new ethernet interfacedata: Dict[str, Any]EthernetInterfaceResponseModel
get()Retrieves an ethernet interface by IDobject_id: strEthernetInterfaceResponseModel
update()Updates an existing ethernet interfaceethernet: EthernetInterfaceUpdateModelEthernetInterfaceResponseModel
list()Lists ethernet interfaces with optional filteringfolder, snippet, device, plus filtersList[EthernetInterfaceResponseModel]
fetch()Fetches a single ethernet interface by name within a containername: str, folder, snippet, deviceEthernetInterfaceResponseModel
delete()Deletes an ethernet interface by IDobject_id: strNone

Ethernet Interface Model Attributes

AttributeTypeRequiredDefaultDescription
namestrYesNoneVariable name (must start with $, max 63 chars)
default_valuestrNoNonePhysical interface (e.g., "ethernet1/1")
idUUIDYes*NoneUnique identifier (*response/update only)
commentstrNoNoneDescription. Max 1023 chars
link_speedstrNo"auto"Link speed (auto, 10, 100, 1000, 10000, etc.)
link_duplexstrNo"auto"Link duplex (auto, half, full)
link_statestrNo"auto"Link state (auto, up, down)
poePoeConfigNoNonePower over Ethernet configuration
layer2EthernetLayer2No**NoneLayer 2 mode configuration
layer3EthernetLayer3No**NoneLayer 3 mode configuration
tapEthernetTapNo**NoneTAP mode configuration
folderstrNo***NoneFolder location. Max 64 chars
snippetstrNo***NoneSnippet location. Max 64 chars
devicestrNo***NoneDevice location. Max 64 chars

* Only required for update and response models ** Only one mode (layer2/layer3/tap) can be configured at a time *** Exactly one container must be provided for create operations

Interface Modes

Layer 2 Mode

Layer 2 mode operates at the data link layer with VLAN tagging and LLDP support.

interface_data = {
"name": "$layer2-interface",
"layer2": {
"vlan_tag": "100",
"lldp": {"enable": True}
},
"folder": "Interfaces"
}

Layer 3 Mode with Static IP

Layer 3 mode with static IP addresses for routed interfaces.

interface_data = {
"name": "$wan-interface",
"default_value": "ethernet1/1",
"layer3": {
"ip": [{"name": "192.168.1.1/24"}],
"mtu": 1500,
"interface_management_profile": "allow-ping"
},
"folder": "Interfaces"
}

Layer 3 Mode with DHCP

Layer 3 mode using DHCP for dynamic IP assignment.

interface_data = {
"name": "$dhcp-interface",
"default_value": "ethernet1/1",
"layer3": {
"dhcp_client": {
"enable": True,
"create_default_route": True,
"default_route_metric": 10
}
},
"folder": "Interfaces"
}

Layer 3 Mode with PPPoE

Layer 3 mode using PPPoE for ISP connections.

interface_data = {
"name": "$pppoe-interface",
"default_value": "ethernet1/1",
"layer3": {
"pppoe": {
"enable": True,
"username": "user@isp.com",
"password": "secret",
"authentication": "auto"
}
},
"folder": "Interfaces"
}

TAP Mode

TAP mode for traffic monitoring without affecting traffic flow.

interface_data = {
"name": "$tap-interface",
"tap": {},
"folder": "Interfaces"
}

Naming Convention

Ethernet interface names in SCM must start with $ (dollar sign) as they are variable references. The default_value field specifies the physical interface assignment.

# Correct usage
{
"name": "$wan-interface", # Variable name (required $ prefix)
"default_value": "ethernet1/1", # Physical interface assignment
"folder": "Interfaces"
}

Exceptions

ExceptionHTTP CodeDescription
InvalidObjectError400Invalid data or parameters
MissingQueryParameterError400Missing required parameters
ObjectNotPresentError404Interface not found
AuthenticationError401Authentication failed
ServerError500Internal server error

Methods

List Ethernet Interfaces

# List all interfaces in a folder
interfaces = client.ethernet_interface.list(folder="Interfaces")

for iface in interfaces:
print(f"Name: {iface.name}")
if iface.layer2:
print(f" Mode: Layer 2, VLAN: {iface.layer2.vlan_tag}")
elif iface.layer3:
print(f" Mode: Layer 3")
elif iface.tap:
print(f" Mode: TAP")

# Filter by mode
layer3_interfaces = client.ethernet_interface.list(
folder="Interfaces",
mode="layer3"
)

# Filter by link speed
gigabit_interfaces = client.ethernet_interface.list(
folder="Interfaces",
link_speed="1000"
)

Filtering Responses

# Exact match only
exact_interfaces = client.ethernet_interface.list(
folder="Interfaces",
exact_match=True
)

# Exclude specific folders
filtered = client.ethernet_interface.list(
folder="Interfaces",
exclude_folders=["All"]
)

Fetch an Ethernet Interface

# Fetch by name
interface = client.ethernet_interface.fetch(
name="$wan-interface",
folder="Interfaces"
)
print(f"Found interface: {interface.name}")

# Get by ID
interface_by_id = client.ethernet_interface.get(interface.id)

Create an Ethernet Interface

# Create Layer 3 interface with static IP
layer3_interface = {
"name": "$wan-interface",
"default_value": "ethernet1/1",
"comment": "WAN Interface",
"link_speed": "1000",
"link_duplex": "full",
"layer3": {
"ip": [{"name": "203.0.113.1/24"}],
"mtu": 1500,
"arp": [
{"name": "203.0.113.254", "hw_address": "00:11:22:33:44:55"}
]
},
"folder": "Interfaces"
}

result = client.ethernet_interface.create(layer3_interface)
print(f"Created interface: {result.name} ({result.id})")

# Create Layer 2 interface
layer2_interface = {
"name": "$layer2-interface",
"layer2": {
"vlan_tag": "200",
"lldp": {"enable": True}
},
"folder": "Interfaces"
}

result = client.ethernet_interface.create(layer2_interface)

Update an Ethernet Interface

# Fetch existing interface
existing = client.ethernet_interface.fetch(
name="$wan-interface",
folder="Interfaces"
)

# Modify attributes
existing.comment = "Updated WAN Interface"
if existing.layer3:
existing.layer3.mtu = 9000

# Update
updated = client.ethernet_interface.update(existing)

Delete an Ethernet Interface

client.ethernet_interface.delete("123e4567-e89b-12d3-a456-426655440000")

Use Cases

Managing Configuration Changes

# Commit changes
result = client.commit(
folders=["Interfaces"],
description="Updated ethernet interfaces",
sync=True
)

print(f"Commit job ID: {result.job_id}")

Error Handling

from scm.exceptions import (
InvalidObjectError,
MissingQueryParameterError,
ObjectNotPresentError
)

try:
interface = client.ethernet_interface.create({
"name": "$test-interface",
"layer2": {"vlan_tag": "100"},
"layer3": {"ip": [{"name": "10.0.0.1/24"}]}, # Error: both modes
"folder": "Interfaces"
})
except InvalidObjectError as e:
print(f"Invalid configuration: {e.message}")
except MissingQueryParameterError as e:
print(f"Missing parameter: {e.message}")

# Name pattern validation
try:
interface = client.ethernet_interface.create({
"name": "ethernet1/1", # Error: missing $ prefix
"folder": "Interfaces"
})
except ValidationError as e:
print("Name must start with $ (dollar sign)")