All Downloads are FREE. Search and download functionalities are using the official Maven repository.

[email protected] Maven / Gradle / Ivy

There is a newer version: 0.22.6
Show newest version
module openconfig-bgp-policy {

  yang-version "1.1";

  // namespace
  namespace "http://openconfig.net/yang/bgp-policy";

  prefix "bgp-pol";

  // import some basic types
  import ietf-inet-types { prefix inet; }
  import openconfig-routing-policy {prefix rpol; }
  import openconfig-policy-types { prefix pt; }
  import openconfig-bgp-types { prefix bgp-types; }
  import openconfig-extensions { prefix oc-ext; }
  import bgp-types { prefix bgp-t; revision-date 2020-01-20; }


  // meta
  organization
    "OpenConfig working group";

  contact
    "OpenConfig working group
    [email protected]";

  description
    "This module contains data definitions for BGP routing policy.
    It augments the base routing-policy module with BGP-specific
    options for conditions and actions.";

  oc-ext:openconfig-version "1.1.0";

  revision "2015-10-09" {
    description
      "Initial OpenConfig public release";
    reference "1.1.0";
  }

  revision "2015-05-15" {
    description
      "Updated model to augment base routing-policy module";
    reference "Pre-release";
  }

  // extension statements

  // feature statements

  // identity statements

  // typedef statements

  typedef bgp-as-path-prepend-repeat {
    type uint8;
    description
      "Option for the BGP as-prepend policy action.  Prepends the
      local AS number repeated n times";
  }

  typedef bgp-set-community-option-type {
    type enumeration {
      enum ADD {
        description
          "add the specified communities to the existing
          community attribute";
      }
      enum REMOVE {
        description
          "remove the specified communities from the
          existing community attribute";
      }
      enum REPLACE {
        description
          "replace the existing community attribute with
          the specified communities. If an empty set is
          specified, this removes the community attribute
          from the route.";
      }
    }
    description
      "Type definition for options when setting the community
      attribute in a policy action";
  }

  typedef bgp-next-hop-type {
    type union {
      type inet:ip-address;
      type enumeration {
        enum SELF {
          description "special designation for local router's own
          address, i.e., next-hop-self";
        }
      }
    }
    description
      "type definition for specifying next-hop in policy actions";
  }

  typedef bgp-set-med-type {
    type union {
      type uint32;
      type string {
        pattern "^[+-][0-9]+";
      }
      type enumeration {
        enum IGP {
          description "set the MED value to the IGP cost toward the
          next hop for the route";
        }
      }
    }
    description
      "Type definition for specifying how the BGP MED can
      be set in BGP policy actions. The three choices are to set
      the MED directly, increment/decrement using +/- notation,
      and setting it to the IGP cost (predefined value).";
  }

  // grouping statements

  grouping bgp-match-conditions {
    description
      "Condition statement definitions for checking membership in a
      defined set";

    container match-community-set {
      presence
        "The presence of this container indicates that the routes
        should match the referenced community-set";

      description
        "Match a referenced community-set according to the logic
        defined in the match-set-options leaf";

      leaf community-set {
        type leafref {
          path "/rpol:routing-policy/rpol:defined-sets/" +
            "bgp-pol:bgp-defined-sets/bgp-pol:community-sets/" +
            "bgp-pol:community-set/bgp-pol:community-set-name";
          require-instance true;
        }
        description
          "References a defined community set";
      }
      uses rpol:match-set-options-group;
    }

    container match-ext-community-set {
      presence
        "The presence of this container indicates that the routes
        should match the referenced extended community set";

      description
        "Match a referenced extended community-set according to the
        logic defined in the match-set-options leaf";

      leaf ext-community-set {
        type leafref {
          path "/rpol:routing-policy/rpol:defined-sets/" +
            "bgp-pol:bgp-defined-sets/bgp-pol:ext-community-sets/" +
            "bgp-pol:ext-community-set/" +
            "bgp-pol:ext-community-set-name";
          require-instance true;
        }
        description "References a defined extended community set";
      }
      uses rpol:match-set-options-group;
    }

    container match-as-path-set {
      presence
        "The presence of this container indicates that the route
        should match the referenced as-path set";

      description
        "Match a referenced as-path set according to the logic
        defined in the match-set-options leaf";

      leaf as-path-set {
        type leafref {
          path "/rpol:routing-policy/rpol:defined-sets/" +
            "bgp-pol:bgp-defined-sets/bgp-pol:as-path-sets/" +
            "bgp-pol:as-path-set/bgp-pol:as-path-set-name";
          require-instance true;
        }
        description "References a defined AS path set";
      }
      uses rpol:match-set-options-group;
    }
  }

  grouping bgp-attribute-conditions {
    description
      "Condition statement definitions for comparing a BGP route
      attribute to a specified value";

    leaf med-eq {
      type uint32;
      description
        "Condition to check if the received MED value is equal to
        the specified value";
    }

    leaf origin-eq {
      type bgp-types:bgp-origin-attr-type;
      description
        "Condition to check if the route origin is equal to the
        specified value";
    }

    leaf-list next-hop-in {
      type inet:ip-address;
      description
        "List of next hop addresses to check for in the route
        update";
    }

    leaf-list afi-safi-in {
      type identityref {
        base "bgp-types:afi-safi-type";
      }
      description
        "List of address families which the NLRI may be
        within";
    }

    leaf local-pref-eq {
      type uint32;
      // TODO: add support for other comparisons if needed
      description
        "Condition to check if the local pref attribute is equal to
        the specified value";
    }

    container community-count {

      presence "node is present in the config data to indicate a
      community-count condition";

      description
        "Value and comparison operations for conditions based on the
        number of communities in the route update";

      uses pt:attribute-compare-operators;

    }

    container as-path-length {

      presence "node is present in the config data to indicate a
      as-path-length condition";

      description
        "Value and comparison operations for conditions based on the
        length of the AS path in the route update";

      uses pt:attribute-compare-operators;
    }

    leaf route-type {
      // TODO: verify extent of vendor support for this comparison
      type enumeration {
        enum INTERNAL {
          description "route type is internal";
        }
        enum EXTERNAL {
          description "route type is external";
        }
      }
      description
        "Condition to check the route type in the route update";
    }
  }


  // augment statements

  augment "/rpol:routing-policy/rpol:defined-sets" {
    description "adds BGP defined sets container to routing policy
    model";

    container bgp-defined-sets {
      description
        "BGP-related set definitions for policy match conditions";

      container community-sets {
        description
          "Enclosing container for community sets";

        list community-set {
          key community-set-name;
          description
              "Definitions for community sets";

          leaf community-set-name {
            type string;
            mandatory true;
            description
              "name / label of the community set -- this is used to
              reference the set in match conditions";
          }

          list communities {
            uses bgp-t:community;
            description
              "members of the community set";
          }
        }
      }

      container ext-community-sets {
        description
          "Enclosing container for extended community sets";

        list ext-community-set {
          key ext-community-set-name;
          description
              "Definitions for extended community sets";

          leaf ext-community-set-name {
            type string;
            description
              "name / label of the extended community set -- this is
              used to reference the set in match conditions";
          }

          list ext-community-member {
            uses bgp-t:extended-community;
            description
              "members of the extended community set";
          }
        }
      }

      container as-path-sets {
        description
          "Enclosing container for AS path sets";

        list as-path-set {
          key as-path-set-name;
          description
              "Definitions for AS path sets";

          leaf as-path-set-name {
            type string;
            description
              "name of the AS path set -- this is used to reference
              the set in match conditions";
          }

          leaf-list as-path-set-member {
            type inet:as-number;
            description
                "AS path expression -- list of ASes in the set";
          }
        }
      }
    }
  }

  augment "/rpol:routing-policy/rpol:policy-definitions/" +
    "rpol:policy-definition/rpol:statements/rpol:statement/" +
    "rpol:conditions" {
    description "BGP policy conditions added to routing policy
    module";

    container bgp-conditions {
      description "Policy conditions for matching
      BGP-specific defined sets or comparing BGP-specific
      attributes";

      uses bgp-match-conditions;
      uses bgp-attribute-conditions;
    }
  }

  augment "/rpol:routing-policy/rpol:policy-definitions/" +
    "rpol:policy-definition/rpol:statements/rpol:statement/" +
    "rpol:actions" {
    description "BGP policy actions added to routing policy
    module";

    container bgp-actions {
      description
        "Definitions for policy action statements that
        change BGP-specific attributes of the route";

      container set-as-path-prepend {

        presence "node is present in the config data to use the AS
      prepend action";
        description
            "action to prepend local AS number to the AS-path a
        specified number of times";

        leaf repeat-n {
          type uint8;
          description "number of times to prepend the local AS
          number";
        }
      }

      container set-community {
        presence "node is present in the config data when
        set-community action is used";
        description
          "action to set the community attributes of the route, along
          with options to modify how the community is modified";

        choice set-community-method {
          description
            "Option to set communities using an inline list or
            reference to an existing defined set.";

          case inline {
            list communities {
              uses bgp-t:community;
              description
                "Set the community values for the update inline with
                a list.";
            }
          }
          case reference {
            leaf community-set-ref {
              type leafref {
                path "/rpol:routing-policy/rpol:defined-sets/" +
                  "bgp-pol:bgp-defined-sets/" +
                  "bgp-pol:community-sets/bgp-pol:community-set/" +
                  "bgp-pol:community-set-name";
                require-instance true;
              }
              description
                "References a defined community set by name";
            }
          }
        }
        leaf options {
          type bgp-set-community-option-type;
          description
            "Options for modifying the community attribute with
            the specified values.  These options apply to both
            methods of setting the community attribute.";
        }
      }

      container set-ext-community {

        presence "node is present in the config data when
        set-community action is used";
        description
          "Action to set the extended community attributes of the
          route, along with options to modify how the community is
          modified";

        choice set-ext-community-method {
          description
            "Option to set communities using an inline list or
            reference to an existing defined set.";

          case inline {
            list ext-community-member {
              uses bgp-t:extended-community;
              description
                "Set the community values for the update inline with
                a list.";
              }
          }
          case reference {
            leaf ext-community-set-ref {
              type leafref {
                path "/rpol:routing-policy/rpol:defined-sets/" +
                  "bgp-pol:bgp-defined-sets/" +
                  "bgp-pol:ext-community-sets/" +
                  "bgp-pol:ext-community-set/" +
                  "bgp-pol:ext-community-set-name";
                require-instance true;
              }
              description
                "References a defined extended community set by
                name";
            }
          }
        }
        leaf options {
          type bgp-set-community-option-type;
          description
            "options for modifying the extended community
            attribute with the specified values. These options
            apply to both methods of setting the community
            attribute.";
        }
      }

      leaf set-route-origin {
        type bgp-types:bgp-origin-attr-type;
        description "set the origin attribute to the specified
        value";
      }

      leaf set-local-pref {
        type uint32;
        description "set the local pref attribute on the route
        update";
      }

      leaf set-next-hop {
        type bgp-next-hop-type;
        description "set the next-hop attribute in the route update";
      }

      leaf set-med {
        type bgp-set-med-type;
        description "set the med metric attribute in the route
        update";
      }
    }
  }

  // rpc statements

  // notification statements
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy