|
|
- From 2332428d3c80ac3d3b4e1c0bdba830b098ef440f Mon Sep 17 00:00:00 2001
- From: Rafael Zalamena <rzalamena@opensourcerouting.org>
- Date: Fri, 5 Jul 2019 11:07:30 -0300
- Subject: [PATCH] yang: initial filter YANG model import
-
- This model contains the description of access-list, prefix-list and
- other lists used by route map and other filtering interfaces.
-
- Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
- ---
- yang/frr-filter.yang | 365 +++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 365 insertions(+)
- create mode 100644 yang/frr-filter.yang
-
- diff --git a/yang/frr-filter.yang b/yang/frr-filter.yang
- new file mode 100644
- index 0000000000..92af6aebfd
- --- /dev/null
- +++ b/yang/frr-filter.yang
- @@ -0,0 +1,365 @@
- +module frr-filter {
- + yang-version 1.1;
- + namespace "http://frrouting.org/yang/filter";
- + prefix frr-filter;
- +
- + import ietf-inet-types {
- + prefix inet;
- + }
- + import ietf-yang-types {
- + prefix yang;
- + }
- +
- + organization "Free Range Routing";
- + contact
- + "FRR Users List: <mailto:frog@lists.frrouting.org>
- + FRR Development List: <mailto:dev@lists.frrouting.org>";
- + description "This module defines filter settings";
- +
- + revision 2019-07-04 {
- + description "Initial revision";
- + }
- +
- + /*
- + * Types.
- + */
- + typedef access-list-standard {
- + description "Standard IPv4 access list (any, host or a prefix)";
- + type uint16 {
- + range "1..99 | 1300..1999";
- + }
- + }
- +
- + typedef access-list-extended {
- + description
- + "Extended IPv4 access list (source / destination any, hosts or prefixes)";
- + type uint16 {
- + range "100..199 | 2000..2699";
- + }
- + }
- +
- + typedef access-list-legacy {
- + description "Standard/Extended IPv4 access list";
- + type uint16 {
- + range "1..199 | 1300..2699";
- + }
- + }
- +
- + typedef access-list-name {
- + description "Access list name formatting";
- + type string;
- + }
- +
- + typedef access-list-sequence {
- + description "Access list sequence number";
- + type uint32 {
- + range "1..4294967295";
- + }
- + }
- +
- + typedef access-list-action {
- + description "Access list return action on match";
- + type enumeration {
- + enum deny {
- + description "Deny an entry";
- + value 0;
- + }
- + enum permit {
- + description "Accept an entry";
- + value 1;
- + }
- + }
- + }
- +
- + /*
- + * Configuration data.
- + */
- + container filter-list {
- + list access-list-legacy {
- + description "Access list legacy instance";
- +
- + key "number sequence";
- +
- + leaf number {
- + description "Access list sequence value";
- + type access-list-legacy;
- + }
- +
- + leaf sequence {
- + description "Access list sequence value";
- + type access-list-sequence;
- + }
- +
- + leaf action {
- + description "Access list action on match";
- + type access-list-action;
- + mandatory true;
- + }
- +
- + leaf remark {
- + description "Access list remark";
- + type string;
- + }
- +
- + choice value {
- + description
- + "Standard access list: value to match.
- + Extended access list: source value to match.";
- + mandatory true;
- +
- + case host {
- + leaf host {
- + description "Host to match";
- + type inet:ipv4-address;
- + }
- + }
- + case network {
- + leaf network {
- + description "Network to match";
- + type inet:ipv4-prefix;
- + }
- + }
- + case any {
- + leaf any {
- + description "Match any";
- + type empty;
- + }
- + }
- + }
- +
- + choice extended-value {
- + when "./sequence >= 100 and ./sequence <= 199 or
- + ./sequence >= 2000 and ./sequence <= 2699";
- + description "Destination value to match";
- +
- + case destination-host {
- + leaf destination-host {
- + description "Host to match";
- + type inet:ipv4-address;
- + }
- + }
- + case destination-network {
- + leaf destination-network {
- + description "Network to match";
- + type inet:ipv4-prefix;
- + }
- + }
- + case destination-any {
- + leaf destination-any {
- + description "Match any";
- + type empty;
- + }
- + }
- + }
- + }
- +
- + list access-list {
- + description "Access list instance";
- +
- + key "type identifier sequence";
- +
- + leaf type {
- + description "Access list content type";
- + type enumeration {
- + enum ipv4 {
- + description "Internet Protocol address version 4";
- + value 0;
- + }
- + enum ipv6 {
- + description "Internet Protocol address version 6";
- + value 1;
- + }
- + enum mac {
- + description "Media Access Control address";
- + value 2;
- + }
- +
- + /*
- + * Protocol YANG models should augment the parent node to
- + * contain the routing protocol specific value. The protocol
- + * must also augment `value` leaf to include its specific
- + * values or expand the `when` statement on the existing cases.
- + */
- + enum custom {
- + description "Custom data type";
- + value 100;
- + }
- + }
- + }
- +
- + leaf identifier {
- + description "Access list identifier";
- + type access-list-name;
- + }
- +
- + leaf sequence {
- + description "Access list sequence value";
- + type access-list-sequence;
- + }
- +
- + leaf action {
- + description "Access list action on match";
- + type access-list-action;
- + mandatory true;
- + }
- +
- + leaf remark {
- + description "Access list remark";
- + type string;
- + }
- +
- + choice value {
- + description "Access list value to match";
- + mandatory true;
- +
- + case ipv4-prefix {
- + when "./type = 'ipv4'";
- +
- + leaf ipv4-prefix {
- + description "Configure IPv4 prefix to match";
- + type inet:ipv4-prefix;
- + }
- +
- + leaf ipv4-exact-match {
- + description "Exact match of prefix";
- + type boolean;
- + default false;
- + }
- + }
- + case ipv6-prefix {
- + when "./type = 'ipv6'";
- +
- + leaf ipv6-prefix {
- + description "Configure IPv6 prefix to match";
- + type inet:ipv6-prefix;
- + }
- +
- + leaf ipv6-exact-match {
- + description "Exact match of prefix";
- + type boolean;
- + default false;
- + }
- + }
- + case mac {
- + when "./type = 'mac'";
- +
- + leaf mac {
- + description "Configure MAC address to match";
- + type yang:mac-address;
- + }
- + }
- + case any {
- + leaf any {
- + description "Match anything";
- + type empty;
- + }
- + }
- + }
- + }
- +
- + list prefix-list {
- + description "Prefix list instance";
- +
- + key "type name sequence";
- +
- + leaf type {
- + description "Prefix list type";
- + type enumeration {
- + enum ipv4 {
- + description "Internet Protocol address version 4";
- + value 0;
- + }
- + enum ipv6 {
- + description "Internet Protocol address version 6";
- + value 1;
- + }
- + }
- + }
- +
- + leaf name {
- + description "Prefix list name";
- + type access-list-name;
- + }
- +
- + leaf sequence {
- + description "Access list sequence value";
- + type access-list-sequence;
- + }
- +
- + leaf action {
- + description "Prefix list action on match";
- + type access-list-action;
- + mandatory true;
- + }
- +
- + leaf description {
- + description "Prefix list user description";
- + type string;
- + }
- +
- + choice value {
- + description "Prefix list value to match";
- + mandatory true;
- +
- + case ipv4-prefix {
- + when "./type = 'ipv4'";
- +
- + leaf ipv4-prefix {
- + description "Configure IPv4 prefix to match";
- + type inet:ipv4-prefix;
- + }
- +
- + leaf ipv4-prefix-length-greater-or-equal {
- + description
- + "Specifies if matching prefixes with length greater than
- + or equal to value";
- + type uint8 {
- + range "0..32";
- + }
- + }
- +
- + leaf ipv4-prefix-length-lesser-or-equal {
- + description
- + "Specifies if matching prefixes with length lesser than
- + or equal to value";
- + type uint8 {
- + range "0..32";
- + }
- + }
- + }
- + case ipv6-prefix {
- + when "./type = 'ipv6'";
- +
- + leaf ipv6-prefix {
- + description "Configure IPv6 prefix to match";
- + type inet:ipv6-prefix;
- + }
- +
- + leaf ipv6-prefix-length-greater-or-equal {
- + description
- + "Specifies if matching prefixes with length greater than
- + or equal to value";
- + type uint8 {
- + range "0..128";
- + }
- + }
- +
- + leaf ipv6-prefix-length-lesser-or-equal {
- + description
- + "Specifies if matching prefixes with length lesser than
- + or equal to value";
- + type uint8 {
- + range "0..128";
- + }
- + }
- + }
- + case any {
- + leaf any {
- + description "Match anything";
- + type empty;
- + }
- + }
- + }
- + }
- + }
- +}
|