Network Working Group H. Fan Internet-Draft Huawei Intended status: Standards Track Expires: June 30, 2017 December 27, 2016 A Yang Data Model for MAC Management draft-fan-yang-mac-00 Abstract This memo proposes a yang model for MAC management. Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119]. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on June 30, 2017. Copyright Notice Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of Fan Expires June 30, 2017 [Page 1] Internet-Draft Abbreviated-Title December 2016 the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2 2. The Design of the MAC Data Model . . . . . . . . . . . . . . . 2 3. Definition of ietf-mac module . . . . . . . . . . . . . . . . 5 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 5. Security Considerations . . . . . . . . . . . . . . . . . . . 28 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 28 7. Normative References . . . . . . . . . . . . . . . . . . . . . 28 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 28 1. Introduction IP network elements normally maintain a MAC table where the information of MAC address, and the associated VLAN number and interfaces are maintianed. When forwarding a packet, the device can use the informaiton in the MAC table to find out the egress quickly so as to reduce the broadcast quickly. The records in a MAC table can be generated either automatically or by managers. This memo proposes a yang model enabling managers to mange the records in the MAC talbe of a network device. 2. The Design of the MAC Data Model module: ietf-mac +--rw mac +--rw globalAttribute | +--rw macAgeTimeEnable? macAgeTimeType | +--rw macAgingTime? uint32 +--rw vlanFdbs | +--rw vlanFdb* [macAddress vlanId slotId] | +--rw macAddress yang:mac-address | +--rw vlanId macVlanId | +--rw slotId string | +--rw macType macType | +--rw outIfName? string | +--ro outNickname string | +--rw isCeDefault? boolean | +--rw ceVlanId? macVlanId | +--rw isFlood? boolean | +--rw isIMac? boolean | +--ro learnedPeriod? uint32 | +--rw outPeerIPs Fan Expires June 30, 2017 [Page 2] Internet-Draft Abbreviated-Title December 2016 | +--ro outPeerIP* [outPeerIP] | +--ro outPeerIP inet:ip-address +--rw vsiFdbs | +--rw vsiFdb* [vsiName slotId vlanid macAddress] | +--rw vsiName string | +--rw slotId string | +--rw vlanid uint16 | +--rw vlanifName? string | +--rw pevid? macVlanId | +--rw cevid? macVlanId | +--rw macAddress yang:mac-address | +--rw macType macType | +--rw outIfType macOutIfType | +--rw outIfName string | +--rw pwId? uint32 | +--rw pwEncap macPwEncapType | +--rw peerIp? inet:ip-address | +--rw pwName? string | +--rw isIMac boolean | +--ro learnedPeriod? uint32 +--rw vsiFdbDynamics | +--ro vsiFdbDynamic* [vsiName slotId vlanid macAddress outIfName] | +--ro vsiName string | +--ro slotId string | +--ro vlanid uint16 | +--ro vlanifName? string | +--ro pevid? macVlanId | +--ro cevid? macVlanId | +--ro macAddress yang:mac-address | +--ro macType macType | +--ro outIfType macOutIfType | +--ro outIfName string | +--ro pwId? uint32 | +--ro pwEncap macPwEncapType | +--ro peerIp inet:ip-address | +--ro pwName? string | +--ro isIMac boolean +--rw bdFdbs | +--rw bdFdb* [slotId macAddress bdId] | +--rw slotId string | +--rw macAddress yang:mac-address | +--rw bdId uint32 | +--rw macType macType | +--rw outIfName string | +--rw unTag? boolean | +--rw peDefault? boolean Fan Expires June 30, 2017 [Page 3] Internet-Draft Abbreviated-Title December 2016 | +--rw ceDefault? boolean | +--rw vid? macVlanId | +--rw cevid? macVlanId | +--ro learnedPeriod? uint32 +--rw macLimitRules | +--rw macLimitRule* [ruleName] | +--rw ruleName string | +--rw maximum uint32 | +--rw rate? uint16 | +--rw action? macLimitForward | +--rw alarm? macEnableStatus +--rw vlanMacLimits | +--rw vlanMacLimit* [vlanId] | +--rw vlanId macVlanId | +--rw maximum uint32 | +--rw rate? uint16 | +--rw action? macLimitForward | +--rw alarm? macEnableStatus +--rw vsiMacLimits | +--rw vsiMacLimit* [vsiName] | +--rw vsiName string | +--rw maximum uint32 | +--rw rate? uint16 | +--rw action? macLimitForward | +--rw alarm? macEnableStatus | +--rw upThreshold uint8 | +--rw downThreshold uint8 +--rw bdMacLimits | +--rw bdMacLimit* [bdId] | +--rw bdId uint32 | +--rw maximum uint32 | +--rw rate? uint16 | +--rw action? macLimitForward | +--rw alarm? macEnableStatus +--rw ifMacLimits | +--rw ifMacLimit* [ifName limitType] | +--rw ifName string | +--rw limitType limitType | +--rw ruleName? -> /mac/macLimitRules /macLimitRule/ruleName | +--rw maximum uint32 | +--rw rate? uint16 | +--rw action? macLimitForward | +--rw alarm? macEnableStatus +--rw ifVlanMacLimits +--ro ifVlanMacLimit* [ifName vlanBegin limitType] +--ro ifName string Fan Expires June 30, 2017 [Page 4] Internet-Draft Abbreviated-Title December 2016 +--ro vlanBegin macVlanId +--ro vlanEnd? macVlanId +--ro limitType limitType +--ro ruleName? -> /mac/macLimitRules /macLimitRule/ruleName +--ro maximum uint32 +--ro rate uint16 +--ro action? macLimitForward +--ro alarm? macEnableStatus 3. Definition of ietf-mac module file "ietf-mac@2016-12-23.yang" module ietf-mac { namespace "http://www.huawei.com/netconf/vrp/huawei-mac"; prefix mac; import ietf-inet-types { prefix "inet"; } import ietf-yang-types { prefix yang; } organization "Huawei Technologies Co.,Ltd."; contact "Huawei Industrial Base Bantian, Longgang Shenzhen 518129 People's Republic of China Website: http://www.huawei.com Email: support@huawei.com"; description "MAC address forwarding."; revision 2016-12-30 { description "Init revision"; reference "Huawei private."; } typedef macVlanId { type uint16 { range "1..4094"; } description Fan Expires June 30, 2017 [Page 5] Internet-Draft Abbreviated-Title December 2016 "VLAN Id."; } typedef macType { type enumeration { enum "static" { value 0; description "Static MAC address entry."; } enum "dynamic" { value 1; description "Dynamic MAC address entry."; } enum "blackHole" { value 2; description "Blackhole MAC address entry"; } enum "sticky" { value 3; description "sticky MAC address entry"; } } description "MAC address type."; } typedef limitType { type enumeration { enum "macLimit" { value 0; description "Interface MAC rule limit."; } enum "macApply" { value 1; description "Interface MAC rule application."; } } description "MAC address limit type."; } Fan Expires June 30, 2017 [Page 6] Internet-Draft Abbreviated-Title December 2016 typedef macLimitForward { type enumeration { enum "forward" { value 0; description "Forward."; } enum "discard" { value 1; description "Discard."; } } description "MAC address limit forward type."; } typedef macEnableStatus { type enumeration { enum "enable" { value 0; description "Enable."; } enum "disable" { value 1; description "Disable."; } } description "MAC enable type."; } typedef macOutIfType { type enumeration { enum "ac" { value 0; description "AC."; } enum "pw" { value 1; description "PW."; } } Fan Expires June 30, 2017 [Page 7] Internet-Draft Abbreviated-Title December 2016 description "MAC out if type."; } typedef macPwEncapType { type enumeration { enum "ethernet" { value 0; description "Ethernet."; } enum "vlan" { value 1; description "VLAN."; } } description "MAC encapsulation type."; } typedef directionType { type enumeration { enum "inbound" { value 0; description "Inbound."; } enum "outbound" { value 1; description "Outbound."; } } description "Direction type."; } typedef discardType { type enumeration { enum "broadcastDiscard" { value 0; description "Discard broadcast."; } enum "unknownMulticastDiscard" { value 1; description Fan Expires June 30, 2017 [Page 8] Internet-Draft Abbreviated-Title December 2016 "Discard unknown multicast."; } enum "unknownUnicastDiscard" { value 2; description "Discard Unknown unicast."; } } description "Discard type."; } typedef broadcastDomainType { type enumeration { enum "VLAN" { value 0; description "VLAN Type."; } enum "VSI" { value 1; description "VSI Type."; } enum "BD" { value 2; description "BD Type."; } } description "Domain type."; } typedef macAgeTimeType { type enumeration { enum "enable" { value 0; description "Enable MAC address global aging."; } enum "disable" { value 1; description "Disable MAC address global aging."; } Fan Expires June 30, 2017 [Page 9] Internet-Draft Abbreviated-Title December 2016 } description "MAC address age time type."; } container mac { description "MAC address forwarding. "; container globalAttribute { description "MAC global attribute."; leaf macAgeTimeEnable { type macAgeTimeType; default "enable"; description "Whether MAC address aging is enabled."; } leaf macAgingTime { when "not(../macAgeTimeEnable='disable') or ../macAgeTimeEnable='enable'"; type uint32 { range "60..1000000"; } default "300"; description "Aging time."; } } container vlanFdbs { description "VLAN forwarding table."; list vlanFdb { key "macAddress vlanId slotId"; description "VLAN forwarding entry."; leaf macAddress { type yang:mac-address; description "MAC address in the format of H-H-H."; } leaf vlanId { type macVlanId; description "VLAN ID."; } leaf slotId { type string { Fan Expires June 30, 2017 [Page 10] Internet-Draft Abbreviated-Title December 2016 length "1..24"; } description "Slot ID."; } leaf macType { type macType; must "((../macType='static' or ../macType='blackHole') )"; mandatory true; description "MAC address type, such as blackhole, static, and dynamic."; } leaf outIfName { when "not(../macType='blackHole') or ../macType='static'"; type string; description "Outbound interface name."; } leaf outNickname { type string { length "1..31"; } config false; mandatory true; description "Nickname."; } leaf isCeDefault { when "not(../macType='blackHole')"; type boolean; default "false"; description "CE default VLAN."; } leaf ceVlanId { when "not(../macType='blackHole') or ../isCeDefault='false' and ../macType='static'"; type macVlanId; description "User VLAN ID."; } leaf isFlood { type boolean; default "false"; description "Flooding MAC."; } Fan Expires June 30, 2017 [Page 11] Internet-Draft Abbreviated-Title December 2016 leaf isIMac { type boolean; default "false"; description "Ingress MAC."; } leaf learnedPeriod { type uint32 { range "0..4294967294"; } default "0"; config false; description "Dynamic MAC Holding Time."; } container outPeerIPs { description "Out Peer IPs."; list outPeerIP { key "outPeerIP"; config false; description "Out Peer IP."; leaf outPeerIP { type inet:ip-address; description "Out Peer IP."; } } } } } container vsiFdbs { description "VSI forwarding table."; list vsiFdb { key "vsiName slotId vlanid macAddress"; description "VSI Forwarding entry."; leaf vsiName { type string { length "1..31"; } description "VSI Name."; } leaf slotId { Fan Expires June 30, 2017 [Page 12] Internet-Draft Abbreviated-Title December 2016 type string { length "1..24"; } description "Slot ID."; } leaf vlanid { type uint16 { range "0..4094"; } description "VLAN ID."; } leaf vlanifName { when "not(../outIfType='pw' or ../macType='blackHole') or ../outIfType='ac' and ../macType='static'"; type string; description "VLANIF interface."; } leaf pevid { when "not(../outIfType='pw' or ../macType='blackHole') or ../outIfType='ac' and ../macType='static'"; type macVlanId; description "Outer VLAN tag."; } leaf cevid { when "not(../outIfType='pw' or ../macType='blackHole') or ../outIfType='ac' and ../macType='static'"; type macVlanId; description "Inner VLAN tag."; } leaf macAddress { type yang:mac-address; description "MAC address in the format of H-H-H."; } leaf macType { type macType; must "((../macType='static' or ../macType='blackHole') )"; mandatory true; description "MAC Type of an interface."; } leaf outIfType { Fan Expires June 30, 2017 [Page 13] Internet-Draft Abbreviated-Title December 2016 when "not(../macType='blackHole') or ../macType='static'"; type macOutIfType; mandatory true; description "Outbound interface type."; } leaf outIfName { when "not(../outIfType='pw' or ../macType='blackHole' or ../outIfType='pw' and ../macType='static') or ../outIfType='ac' and ../macType='static'"; type string; mandatory true; description "Outbound interface name."; } leaf pwId { when "not(../macType='blackHole' or ../outIfType='ac' and ../macType='static') or ../outIfType='pw' and ../macType='static'"; type uint32 { range "1..4294967295"; } description "PW ID."; } leaf pwEncap { when "not(../macType='blackHole' or ../outIfType='ac' and ../macType='static') or ../outIfType='pw' and ../macType='static'"; type macPwEncapType; mandatory true; description "PW encapsulation type."; } leaf peerIp { when "not(../macType='blackHole' or ../outIfType='ac' and ../macType='static') or ../outIfType='pw' and ../macType='static'"; type inet:ip-address; description "Peer IP address."; } leaf pwName { type string { length "1..31"; } description Fan Expires June 30, 2017 [Page 14] Internet-Draft Abbreviated-Title December 2016 "PW Name."; } leaf isIMac { type boolean; mandatory true; description "Ingress MAC."; } leaf learnedPeriod { type uint32 { range "0..4294967294"; } default "0"; config false; description "Dynamic MAC Holding Time."; } } } container vsiFdbDynamics { description "VSI Forwarding Table on Slot."; list vsiFdbDynamic { key "vsiName slotId vlanid macAddress outIfName"; config false; description "VSI Forwarding Table on Slot."; leaf vsiName { type string { length "1..31"; } description "VSI Name."; } leaf slotId { type string { length "1..24"; } description "Slot ID."; } leaf vlanid { type uint16 { range "0..4094"; } description "VLAN ID."; Fan Expires June 30, 2017 [Page 15] Internet-Draft Abbreviated-Title December 2016 } leaf vlanifName { type string; description "VLANIF interface."; } leaf pevid { type macVlanId; description "Outer VLAN tag."; } leaf cevid { type macVlanId; description "Inner VLAN tag."; } leaf macAddress { type yang:mac-address; description "MAC address in the format of H-H-H."; } leaf macType { type macType; mandatory true; description "MAC Type of an interface."; } leaf outIfType { type macOutIfType; mandatory true; description "Outbound interface type."; } leaf outIfName { type string; description "Outbound interface name."; } leaf pwId { type uint32 { range "1..4294967295"; } description "PW ID."; } leaf pwEncap { type macPwEncapType; Fan Expires June 30, 2017 [Page 16] Internet-Draft Abbreviated-Title December 2016 mandatory true; description "PW encapsulation type."; } leaf peerIp { type inet:ip-address; mandatory true; description "Peer IP address."; } leaf pwName { type string { length "1..31"; } description "PW Name."; } leaf isIMac { type boolean; mandatory true; description "Ingress MAC."; } } } container bdFdbs { description "BD forwarding entries."; list bdFdb { key "slotId macAddress bdId"; description "BD forwarding entry."; leaf slotId { type string { length "1..50"; } description "Slot number."; } leaf macAddress { type yang:mac-address; description "MAC address of a bridge domain."; } leaf bdId { type uint32 { range "1..16777215"; Fan Expires June 30, 2017 [Page 17] Internet-Draft Abbreviated-Title December 2016 } description "ID of a bridge domain."; } leaf macType { type macType; must "((../macType='static' or ../macType='blackHole') )"; mandatory true; description "MAC address type of a bridge domain."; } leaf outIfName { when "not(../macType='blackHole') or ../unTag='false' and ../peDefault='false' and ../ceDefault='false' and ../macType='static'"; type string; mandatory true; description "Outbound interface name."; } leaf unTag { when "not(../macType='blackHole') or ../unTag='false' and ../peDefault='false' and ../ceDefault='false' and ../macType='static'"; type boolean; default "false"; description "Packets without VLAN tags."; } leaf peDefault { when "not(../macType='blackHole' or ../unTag='true') or ../unTag='false' and ../peDefault='false' and ../ceDefault='false' and ../macType='static'"; type boolean; default "false"; description "PE default VLAN."; } leaf ceDefault { when "not(../peDefault='true' or ../macType='blackHole' or ../unTag='true') or ../unTag='false' and ../peDefault='false' and ../ceDefault='false' and ../macType='static'"; type boolean; default "false"; description "CE default VLAN."; Fan Expires June 30, 2017 [Page 18] Internet-Draft Abbreviated-Title December 2016 } leaf vid { when "not(../peDefault='true' or ../macType='blackHole' or ../unTag='true') or ../unTag='false' and ../peDefault='false' and ../ceDefault='false' and ../macType='static'"; type macVlanId; description "Outer VLAN tag."; } leaf cevid { when "not(../peDefault='true' or ../ceDefault='true' or ../macType='blackHole' or ../unTag='true') or ../unTag='false' and ../peDefault='false' and ../ceDefault='false' and ../macType='static'"; type macVlanId; description "Inner VLAN tag."; } leaf learnedPeriod { type uint32 { range "0..4294967294"; } default "0"; config false; description "Dynamic MAC Holding Time."; } } } container macLimitRules { description "Global MAC address learning limit rule."; list macLimitRule { key "ruleName"; description "Global MAC address learning limit."; leaf ruleName { type string { length "1..31"; } description "Global MAC address learning limit rule name."; } leaf maximum { type uint32 { range "0..131072"; Fan Expires June 30, 2017 [Page 19] Internet-Draft Abbreviated-Title December 2016 } must "not(../rate=0) or (../rate=0 and ../maximum>0)"; mandatory true; description "Maximum number of MAC addresses that can be learned."; } leaf rate { type uint16 { range "0..1000"; } must "not(../maximum=0) or (../maximum=0 and ../rate>0)"; default "0"; description "Interval at which MAC addresses are learned."; } leaf action { type macLimitForward; default "discard"; description "Discard or forward after the number of learned MAC addresses reaches the maximum number."; } leaf alarm { type macEnableStatus; default "enable"; description "Whether an alarm is generated after the number of learned MAC addresses reaches the maximum number."; } } } container vlanMacLimits { description "VLAN MAC address limit list."; list vlanMacLimit { key "vlanId"; description "VLAN MAC address limit."; leaf vlanId { type macVlanId; description "VLAN ID."; } leaf maximum { type uint32 { range "0..130048"; } Fan Expires June 30, 2017 [Page 20] Internet-Draft Abbreviated-Title December 2016 must "not(../rate=0) or (../rate=0 and ../maximum>0)"; mandatory true; description "Maximum number of MAC addresses that can be learned in a VLAN."; } leaf rate { type uint16 { range "0..1000"; } must "not(../maximum=0) or (../maximum=0 and ../rate>0)"; default "0"; description "Interval at which MAC addresses are learned in a VLAN."; } leaf action { type macLimitForward; default "discard"; description "Discard or forward after the number of learned MAC addresses reaches the maximum number in a VLAN."; } leaf alarm { type macEnableStatus; default "enable"; description "Whether an alarm is generated after the number of learned MAC addresses reaches the maximum number in a VLAN."; } } } container vsiMacLimits { description "VSI MAC address limit list."; list vsiMacLimit { key "vsiName"; description "VSI MAC address limit."; leaf vsiName { type string { length "1..31"; } description "VSI name."; } leaf maximum { type uint32 { Fan Expires June 30, 2017 [Page 21] Internet-Draft Abbreviated-Title December 2016 range "0..524288"; } must "not(../rate=0) or (../rate=0 and ../maximum>0)"; mandatory true; description "Maximum number of MAC addresses that can be learned in a VSI."; } leaf rate { type uint16 { range "0..1000"; } must "not(../maximum=0) or (../maximum=0 and ../rate>0)"; default "0"; description "Interval at which MAC addresses are learned in a VSI."; } leaf action { type macLimitForward; default "discard"; description "Discard or forward after the number of learned MAC addresses reaches the maximum number in a VSI."; } leaf alarm { type macEnableStatus; default "disable"; description "Whether an alarm is generated after the number of learned MAC addresses reaches the maximum number in a VSI."; } leaf upThreshold { type uint8 { range "80..100"; } must "(../upThreshold>=../downThreshold)"; mandatory true; description "Upper limit for the number of MAC addresses."; } leaf downThreshold { type uint8 { range "60..100"; } mandatory true; description "Upper limit for the number of MAC addresses."; Fan Expires June 30, 2017 [Page 22] Internet-Draft Abbreviated-Title December 2016 } } } container bdMacLimits { description "BD MAC address limit list."; list bdMacLimit { key "bdId"; description "BD MAC address limit."; leaf bdId { type uint32 { range "1..16777215"; } description "Specifies the ID of a bridge domain."; } leaf maximum { type uint32 { range "0..130048"; } must "not(../rate=0) or (../rate=0 and ../maximum>0)"; mandatory true; description "Maximum number of MAC addresses that can be learned in a BD."; } leaf rate { type uint16 { range "0..1000"; } default "0"; description "Interval at which MAC addresses are learned in a BD."; } leaf action { type macLimitForward; default "discard"; description "Forward or discard the packet."; } leaf alarm { type macEnableStatus; default "enable"; description "Whether an alarm is generated after the number of learned MAC addresses reaches the maximum number."; Fan Expires June 30, 2017 [Page 23] Internet-Draft Abbreviated-Title December 2016 } } } container ifMacLimits { description "Interface MAC address limit list."; list ifMacLimit { key "ifName limitType"; description "Interface MAC address limit."; leaf ifName { type string; description "Interface name."; } leaf limitType { type limitType; description "Interface MAC limit type."; } leaf ruleName { type leafref { path "/mac/macLimitRules/macLimitRule/ruleName"; } description "Rule name."; } leaf maximum { when "not(../limitType='macApply') or ../limitType='macLimit'"; type uint32 { range "0..131072"; } must "not(../rate=0) or (../rate=0 and ../maximum>0)"; mandatory true; description "Maximum number of MAC addresses that can be learned on an interface."; } leaf rate { when "not(../limitType='macApply') or ../limitType='macLimit'"; type uint16 { range "0..1000"; } must "not(../maximum=0) or (../maximum=0 and ../rate>0)"; default "0"; Fan Expires June 30, 2017 [Page 24] Internet-Draft Abbreviated-Title December 2016 description "Interval (ms) at which MAC addresses are learned on an interface."; } leaf action { when "not(../limitType='macApply') or ../limitType='macLimit'"; type macLimitForward; default "discard"; description "Discard or forward after the number of learned MAC addresses reaches the maximum number on an interface"; } leaf alarm { when "not(../limitType='macApply') or ../limitType='macLimit'"; type macEnableStatus; default "enable"; description "Whether an alarm is generated after the number of learned MAC addresses reaches the maximum number on an interface."; } } } container ifVlanMacLimits { description "Interface + VLAN MAC address limit list."; list ifVlanMacLimit { key "ifName vlanBegin limitType"; config false; description "Interface + VLAN MAC address limit."; leaf ifName { type string; description "Name of an interface. "; } leaf vlanBegin { type macVlanId; description "Start VLAN ID."; } leaf vlanEnd { type macVlanId; must "(../vlanEnd>=../vlanBegin) or not(../limitType='macApply')"; description Fan Expires June 30, 2017 [Page 25] Internet-Draft Abbreviated-Title December 2016 "End VLAN ID."; } leaf limitType { type limitType; description "Interface MAC limit type."; } leaf ruleName { type leafref { path "/mac/macLimitRules/macLimitRule/ruleName"; } description "Rule name."; } leaf maximum { when "not(../limitType='macApply') or ../limitType='macLimit'"; type uint32 { range "0..131072"; } mandatory true; description "Maximum number of MAC addresses that can be learned on an interface."; } leaf rate { when "not(../limitType='macApply') or ../limitType='macLimit'"; type uint16 { range "0..1000"; } mandatory true; description "Interval (ms) at which MAC addresses are learned on an interface."; } leaf action { when "not(../limitType='macApply') or ../limitType='macLimit'"; type macLimitForward; default "discard"; description "Discard or forward the packet."; } leaf alarm { when "not(../limitType='macApply') or ../limitType='macLimit'"; Fan Expires June 30, 2017 [Page 26] Internet-Draft Abbreviated-Title December 2016 type macEnableStatus; default "enable"; description "Whether an alarm is generated after the number of learned MAC addresses reaches the maximum number."; } } } } } 4. IANA Considerations This document makes no request of IANA. Note to RFC Editor: this section may be removed on publication as an RFC. Fan Expires June 30, 2017 [Page 27] Internet-Draft Abbreviated-Title December 2016 5. Security Considerations TBD 6. Acknowledgements Authors would like to thank the comments and suggestions from Dacheng Zhang. 7. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . Author's Address Huihua Fan Huawei EMail: fanhuihua@huawei.com Fan Expires June 30, 2017 [Page 28]