# -*- coding: utf-8 -*-
##----------------------------------------------------------------------
## IGetInterfaces
##----------------------------------------------------------------------
## Copyright (C) 2007-2016 The NOC Project
## See LICENSE for details
##----------------------------------------------------------------------
from base import *
[docs]class IGetInterfaces(Interface):
"""
IGetInterfaces.
Common usage scenarios
L3 IPv4/IPv6 port.
------------------
* forwarding_instance:
* forwarding_instance = "default"
* type = "ip"
* interfaces:
* name = physical port name
* type = "physical"
* mac = interface mac address
* subinterfaces:
* name = interface name (same as physical name for most platforms)
* enabled_afi = ["IPv4", "IPv6"]
* ipv4_addresses = list of IPv4 addresses
* ipv6_addresses = list of IPv6 addresses
L3 IP Unnumbered IPv4
---------------------
* forwarding_instance:
* forwarding_instance = "default"
* type = "ip"
* interfaces:
* name = physical port name
* type = "physical"
* mac = interface mac address
* subinterfaces:
* name = interface name (same as physical name for most platforms)
* enabled_afi = ["IPv4"]
* ip_unnumbered_subinterface = subinterface name to borrow an address
L3 Switchport (untagged access port in VLANID)
----------------------------------------------
* forwarding_instance:
* forwarding_instance = "default"
* type = "ip"
* interfaces:
* name = physical port name
* type = "physical"
* mac = interface mac address
* subinterfaces:
* name = interface name (same as physical name for most platforms)
* enabled_afi = ["BRIDGE"]
* untagged_vlan = VLANID
L3 Switchport (tagged port in VLANS)
------------------------------------
* forwarding_instance:
* forwarding_instance = "default"
* type = "ip"
* interfaces:
* name = physical port name
* type = "physical"
* mac = interface mac address
* subinterfaces:
* name = interface name (same as physical name for most platforms)
* enabled_afi = ["BRIDGE"]
* tagged_vlans = VLANS (list)
L3-terminated 802.1Q trunk (in VLAN1 and VLAN2)
-----------------------------------------------
* forwarding_instance:
* forwarding_instance = "default"
* type = "ip"
* interfaces:
* name = physical port name
* type = "physical"
* mac = interface mac address
* subinterfaces:
* name = interface name.VLAN1 (for most platforms)
* vlan_ids = [VLAN1]
* enabled_afi = ["IPv4"]
* ipv4_addresses = [list of VLAN1 addresses]
* name = interface name.VLAN2 (for most platforms)
* vlan_ids = [VLAN2]
* enabled_afi = ["IPv4"]
* ipv4_addresses = [list of VLAN2 addresses]
L3 portchannel (if1 is aggregated interface of if2 and if3 with LACP)
---------------------------------------------------------------------
* forwarding_instance:
* forwarding_instance = "default"
* type = "ip"
* interfaces:
* name = if1
* type = "aggregated"
* subinterfaces:
* name = interface name (same as parent for most platforms)
* enabled_afi = ["IPv4"]
* ipv4_addresses = list of IPv4 addresses
* name = if2
* type = "physical"
* enabled_protoocols = ["LACP"]
* aggregated_interface = "if1"
* name = if3
* type = "physical"
* enabled_protoocols = ["LACP"]
* aggregated_interface = "if1"
L2 portchannel, tagged (if1 is aggregated interface of if2(LACP) and if3(static))
---------------------------------------------------------------------------------
* forwarding_instance:
* forwarding_instance = "default"
* type = "ip"
* interfaces:
* name = if1
* type = "aggregated"
* subinterfaces:
* name = interface name (same as parent for most platforms)
* enabled_afi = ["BRIDGE"]
* tagged_vlans = list of tagged vlans
* name = if2
* type = "physical"
* enabled_protocols = ["LACP"]
* aggregated_interface = "if1"
* name = if3
* type = "physical"
* aggregated_interface = "if1"
802.1Q trunk. (VLAN1 is L3, VLAN2 in VRF1)
------------------------------------------
* forwarding_instance:
* forwarding_instance = "default"
* type = "ip"
* interfaces:
* name = interface name
* type = "physical"
* subinterfaces:
* name = interface name.VLAN1 (for most platforms)
* vlan_ids = [VLAN1]
* enabled_afi = ["IPv4"]
* ipv4_addresses = List of VLAN1 addresses
* forwarding_instance = "VRF1"
* type = "vrf"
@todo RD
* interfaces:
* name = interface name
* type = "physical"
* subinterfaces:
* name = interface name.VLAN2 (for most platforms)
* vlan_ids = [VLAN2]
* enabled_afi = ["IPv4"]
* ipv4_addresses = List of VLAN2 addresses in VRF1
DSLAM routed port
-----------------
* forwarding_instance:
* forwarding_instance = "default"
* type = "ip"
* interfaces:
* name = physical port name
* type = "physical"
* subinterfaces:
* name = interface name (same as physical name for most platforms)
* enabled_afi = ["IPv4", "IPv6", "ATM"]
* ipv4_addresses = list of IPv4 addresses
* ipv6_addresses = list of IPv6 addresses
* vpi = port vpi
* vci = port vci
DSLAM bridge port
-----------------
* forwarding_instance:
* forwarding_instance = "default"
* type = "ip"
* interfaces:
* name = physical port name
* type = "physical"
* subinterfaces:
* name = interface name (same as physical name for most platforms)
* enabled_afi = ["BRIDGE", "ATM"]
* untagged_vlan = untagged vlan, if any
* tagged_vlans = list of tagged vlans, if any
* vpi = port vpi
* vci = port vci
:returns:
:rtype: DictParameter
"""
returns = ListOfParameter(element=DictParameter(attrs={
# Name of the forwarding instance
"forwarding_instance": StringParameter(default="default"),
"virtual_router": StringParameter(required=False),
"type": StringParameter(choices=["ip", "bridge", "VRF",
"VPLS", "VLL"], default="ip"),
"rd": RDParameter(required=False),
"interfaces": ListOfParameter(element=DictParameter(attrs={
"name": InterfaceNameParameter(),
"type": StringParameter(choices=[
"physical", "SVI", "aggregated",
"loopback", "management",
"null", "tunnel", "other",
"template", "unknown"]),
"admin_status": BooleanParameter(default=False),
"oper_status": BooleanParameter(default=False),
"aggregated_interface": InterfaceNameParameter(required=False), # Not empty for portchannel members
# L2 protocols enabled on interface
"enabled_protocols": ListOfParameter(
element=StringParameter(choices=[
"LACP", "LLDP", "CDP", "UDLD", "CTP", "GVRP", "VTP", "STP",
"BFD", "OAM", "NDP"
]), required=False),
"description": StringParameter(required=False),
"mac": MACAddressParameter(required=False),
"snmp_ifindex": IntParameter(required=False),
"subinterfaces": ListOfParameter(element=DictParameter(attrs={
"name": InterfaceNameParameter(),
"admin_status": BooleanParameter(default=False),
"oper_status": BooleanParameter(default=False),
"mtu": IntParameter(required=False),
"description": StringParameter(required=False),
"mac": MACAddressParameter(required=False),
"vlan_ids": VLANStackParameter(required=False),
# Enabled address families
"enabled_afi": ListOfParameter(
element=StringParameter(choices=[
"IPv4", "IPv6", "ISO", "MPLS", "BRIDGE", "ATM", "iSCSI"
]), required=False # #todo: make required
),
"ipv4_addresses": ListOfParameter(element=IPv4PrefixParameter(), required=False), # enabled_afi = [... IPv4 ...]
"ipv6_addresses": ListOfParameter(element=IPv6PrefixParameter(), required=False), # enabled_afi = [... IPv6 ...]
"iso_addresses": ListOfParameter(element=StringParameter(), required=False), # # enabled_afi = [... ISO ...]
"vpi": IntParameter(required=False), # enabled afi = [ ... ATM ... ]
"vci": IntParameter(required=False), # enabled afi = [ ... ATM ... ]
# Enabled L3 protocols
"enabled_protocols": ListOfParameter(
element=StringParameter(choices=[
"ISIS", "OSPF", "RIP", "EIGRP", "OSPFv3",
"BGP",
"LDP", "RSVP",
"PIM", "DVMRP", "IGMP", "VRRP", "SRRP"
]), required=False),
"untagged_vlan": VLANIDParameter(required=False), # enabled_afi = [BRIDGE]
"tagged_vlans": ListOfParameter(element=VLANIDParameter(), required=False), # enabled_afi = [BRIDGE]
"ip_unnumbered_subinterface": InterfaceNameParameter(required=False),
"snmp_ifindex": IntParameter(required=False),
# Tunnel services
"tunnel": DictParameter(required=False, attrs={
"type": StringParameter(choices=[
"GRE", "IPIP", "IPsec", "PPTP", "L2TP", "PPPOE", "PPP",
"SSTP", "EOIP", "SLIP"
]),
"local_address": IPParameter(required=False),
"remote_address": IPParameter(required=False)
})
}))
}))
}))