blob: 1e5a7fc2f37004ff7ce96bb31e20eb3512c32a7b [file] [log] [blame]
module ietf-dmm-fpcagent {
namespace "urn:ietf:params:xml:ns:yang:fpcagent";
prefix fpcagent;
import ietf-dmm-fpcbase { prefix fpcbase; revision-date 2016-08-03; }
import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
import ietf-dmm-fpc-pmip { prefix fpc-pmip; revision-date 2016-01-19; }
import ietf-dmm-threegpp { prefix threegpp; }
organization "IETF DMM Working Group";
contact "Satoru Matsushima <satoru.matsushima@g.softbank.co.jp>";
description
"This module contains YANG definition for
Forwarding Policy Configuration Protocol.(FPCP)";
revision 2016-08-03 {
description "Changes based on -04 version of FPC draft.";
reference "draft-ietf-dmm-fpc-cpdp-04";
}
feature fpc-cloning {
description "An ability to support cloning in the RPC.";
}
feature fpc-basename-registry {
description "Ability to track Base Names already provisioned on the Agent";
}
feature fpc-bundles {
description "Ability for Client to send multiple bundles of actions to
an Agent";
}
feature fpc-client-binding {
description "Allows a FPC Client to bind a DPN to an Topology Object";
}
feature fpc-auto-binding {
description "Allows a FPC Agent to advertise Topology Objects that could be DPNs";
}
feature instruction-bitset {
description "Allows the expression of instructions (bit sets) over FPC.";
}
feature operation-ref-scope {
description "Provides the scope of refeneces in an operation. Used to optmize
the Agent processing.";
}
typedef agent-identifier {
type fpcbase:fpc-identity;
}
typedef client-identifier {
type fpcbase:fpc-identity;
}
grouping basename-info {
leaf basename {
if-feature fpcagent:fpc-basename-registry;
description "Rules Basename";
type fpcbase:fpc-identity;
}
leaf base-state {
if-feature fpcagent:fpc-basename-registry;
type string;
}
leaf base-checkpoint {
if-feature fpcagent:fpc-basename-registry;
type string;
}
}
// Top Level Structures
container tenants {
description "";
list tenant {
description "";
key "tenant-id";
leaf tenant-id {
type fpcbase:fpc-identity;
}
container fpc-policy {
list policy-groups {
key "policy-group-id";
uses fpcbase:fpc-policy-group;
}
list policies {
key "policy-id";
uses fpcbase:fpc-policy;
}
list descriptors {
key descriptor-id;
uses fpcbase:fpc-descriptor;
}
list actions {
key action-id;
uses fpcbase:fpc-action;
}
}
container fpc-mobility {
config false;
list contexts {
key context-id;
uses fpcbase:fpc-context;
}
list ports {
key port-id;
uses fpcbase:fpc-port;
}
list monitors {
key monitor-id;
uses fpcbase:monitor-config;
}
}
container fpc-topology {
// Basic Agent Topology Structures
list domains {
key domain-id;
uses fpcbase:fpc-domain;
uses fpcagent:basename-info;
}
list dpn-group-peers {
if-feature fpcbase:fpc-basic-agent;
key "remote-dpn-group-id";
uses fpcbase:fpc-dpn-peer-group;
}
leaf topology-dpn-id {
if-feature fpcbase:fpc-basic-agent;
type fpcbase:fpc-dpn-id;
}
leaf-list control-protocols {
if-feature fpcbase:fpc-basic-agent;
type identityref {
base "fpcbase:fpc-dpn-control-protocol";
}
}
list dpn-groups {
if-feature fpcbase:fpc-multi-dpn;
key dpn-group-id;
uses fpcagent:fpc-dpn-group;
list domains {
key domain-id;
uses fpcbase:fpc-domain;
uses fpcagent:basename-info;
}
}
list dpns {
if-feature fpcbase:fpc-multi-dpn;
key dpn-id;
uses fpcbase:fpc-dpn;
}
}
}
}
container fpc-agent-info {
// General Agent Structures
leaf-list supported-features {
type string;
}
// Common Agent Info
list supported-events {
key event;
leaf event {
type identityref {
base "fpcbase:event-type";
}
}
leaf event-id {
type fpcbase:event-type-id;
}
}
list supported-error-types {
key error-type;
leaf error-type {
type identityref {
base "fpcagent:error-type";
}
}
leaf error-type-id {
type fpcagent:error-type-id;
}
}
}
// Multi-DPN Agent Structures
grouping fpc-dpn-group {
leaf dpn-group-id {
type fpcbase:fpc-dpn-group-id;
}
leaf data-plane-role {
type identityref {
base "fpcbase:fpc-forwaridingplane-role";
}
}
leaf access-type {
type identityref {
base "fpcbase:fpc-access-type";
}
}
leaf mobility-profile {
type identityref {
base "fpcbase:fpc-mobility-profile-type";
}
}
list dpn-group-peers {
key "remote-dpn-group-id";
uses fpcbase:fpc-dpn-peer-group;
}
}
// RPC
// RPC Specific Structures
//Input Structures
typedef admin-status {
type enumeration {
enum enabled { value 0; }
enum disabled { value 1; }
enum virtual { value 2; }
}
}
typedef session-status {
type enumeration {
enum complete { value 0; }
enum incomplete { value 1; }
enum outdated { value 2; }
}
}
typedef op-delay {
type uint32;
}
typedef op-identifier {
type uint64;
}
typedef ref-scope {
description "Search scope for references in the operation.
op - All references are contained in the operation body (intra-op)
bundle - All references in exist in bundle (inter-operation/intra-bundle).
NOTE - If this value comes in CONFIG call it is equivalen to 'op'.
storage - One or more references exist outside of the operation and bundle.
A lookup to a cache / storage is required.
unknown - the location of the references are unknown. This is treated as
a 'storage' type.";
type enumeration {
enum none { value 0; }
enum op { value 1; }
enum bundle { value 2; }
enum storage { value 3; }
enum unknown { value 4; }
}
}
grouping instructions {
container instructions {
if-feature instruction-bitset;
choice instr-type {
case pmip-instr {
uses fpc-pmip:pmip-commandset;
}
case instr-3gpp-mob {
uses threegpp:threegpp-commandset;
}
}
}
}
grouping op-header {
leaf client-id {
type fpcagent:client-identifier;
}
leaf delay {
type op-delay;
}
leaf session-state {
type session-status;
}
leaf admin-state {
type admin-status;
}
leaf op-type {
type enumeration {
enum create { value 0; }
enum update { value 1; }
enum query { value 2; }
enum delete { value 3; }
}
}
leaf op-ref-scope {
if-feature operation-ref-scope;
type fpcagent:ref-scope;
}
uses fpcagent:instructions;
}
grouping clone-ref {
leaf entity {
type fpcbase:fpc-identity;
}
leaf source {
type fpcbase:fpc-identity;
}
}
identity command-set {
description "protocol specific commands";
}
grouping context-operation {
uses fpcbase:fpc-context;
uses fpcagent:instructions;
}
grouping port-operation {
uses fpcbase:fpc-port;
uses fpcagent:instructions;
}
// Output Structure
grouping payload {
list ports {
uses fpcagent:port-operation;
}
list contexts {
uses fpcagent:context-operation;
}
}
grouping op-input {
uses fpcagent:op-header;
leaf op-id {
type op-identifier;
}
choice op_body {
case create_or_update {
list clones {
if-feature fpc-cloning;
key entity;
uses fpcagent:clone-ref;
}
uses fpcagent:payload;
}
case delete_or_query {
uses fpcbase:targets-value;
}
}
}
typedef result {
type enumeration {
enum ok { value 0; }
enum err { value 1; }
enum ok-notify-follows { value 2; }
}
}
identity error-type {
description "Base Error Type";
}
identity name-already-exists {
description "Notification that an entity of the same name already exists";
}
typedef error-type-id {
description "Integer form of the Error Type";
type uint32;
}
grouping op-status-value {
leaf op-status {
type enumeration {
enum ok { value 0; }
enum err { value 1; }
}
}
}
grouping result-body {
leaf op-id {
type op-identifier;
}
leaf result {
type result;
}
choice result-type {
case err {
leaf error-type-id {
type fpcagent:error-type-id;
}
leaf error-info {
type string {
length "1..1024";
}
}
}
case common-success {
uses fpcagent:payload;
}
case delete-success {
uses fpcbase:targets-value;
}
case empty-case {
}
}
}
grouping result-body-dpn {
leaf result {
type result; }
choice result-type {
case err {
leaf error-type-id {
type fpcagent:error-type-id;
}
leaf error-info {
type string {
length "1..1024";
}
}
}
case common-delete-success {
uses fpcbase:fpc-dpn;
}
case empty-case {
}
}
}
typedef dpn-operation {
type enumeration {
enum add { value 0; }
enum remove { value 1; }
}
}
grouping dpn-input {
leaf abstract-dpn-id {
type fpcbase:fpc-dpn-id;
}
leaf input-dpn-id {
type fpcbase:fpc-dpn-id;
}
leaf operation {
type fpcagent:dpn-operation;
}
}
// Common RPCs
rpc configure-dpn {
input {
uses fpcagent:dpn-input;
}
output {
uses fpcagent:result-body-dpn;
}
}
rpc configure {
input {
uses fpcagent:op-input;
}
output {
uses fpcagent:result-body;
}
}
rpc configure-bundles {
if-feature fpcagent:fpc-bundles;
input {
leaf client-id {
type fpcagent:client-identifier;
}
leaf highest-op-ref-scope {
if-feature operation-ref-scope;
type fpcagent:ref-scope;
}
list bundles {
key op-id;
uses fpcagent:op-input;
}
}
output {
list bundles {
key op-id;
uses fpcagent:result-body;
}
}
}
// Notification Messages & Structures
typedef notification-id {
type uint32;
}
grouping notification-header {
leaf notification-id {
type fpcagent:notification-id;
}
leaf timestamp {
type uint64;
}
}
grouping cause-values {
leaf cause-value {
type uint32;
}
}
notification config-result-notification {
uses fpcagent:notification-header;
choice value {
case config-result {
uses fpcagent:op-status-value;
uses fpcagent:cause-values;
uses fpcagent:result-body;
}
case config-bundle-result {
list bundles {
uses fpcagent:op-status-value;
uses fpcagent:cause-values;
uses fpcagent:result-body;
}
}
}
}
rpc event_register {
description "Used to register monitoring of parameters/events";
input {
uses fpcbase:monitor-config;
leaf client-id {
type fpcagent:client-identifier;
}
}
output {
leaf monitor-result {
type fpcagent:result;
}
}
}
rpc event_deregister {
description "Used to de-register monitoring of parameters/events";
input {
list monitors {
uses fpcbase:monitor-id;
}
leaf client-id {
type fpcagent:client-identifier;
}
}
output {
leaf monitor-result {
type fpcagent:result;
}
}
}
rpc probe {
description "Probe the status of a registered monitor";
input {
uses fpcbase:targets-value;
leaf client-id {
type fpcagent:client-identifier;
}
}
output {
leaf monitor-result {
type fpcagent:result;
}
}
}
grouping dpn-status-value {
leaf dpn-status {
type enumeration {
enum available { value 0; }
enum unavailable { value 1; }
}
}
}
notification notify {
uses fpcagent:notification-header;
choice value {
case dpn-candidate-available {
if-feature fpcagent:fpc-auto-binding;
leaf candidate-node-id {
type inet:uri;
}
leaf-list access-types {
type identityref {
base "fpcbase:fpc-access-type";
}
}
leaf-list mobility-profiles {
type identityref {
base "fpcbase:fpc-mobility-profile-type";
}
}
leaf-list forwarding-plane-roles {
type identityref {
base "fpcbase:fpc-forwaridingplane-role";
}
}
}
case dpn-availability {
leaf availability-message-type {
type string;
}
uses fpcagent:dpn-status-value;
leaf load {
description "A percentage value (between 0 and 100) of the system load. This is a combined measurement.";
type int8;
}
uses fpcbase:fpc-dpn;
}
case monitor-notification {
choice monitor-notification-value {
case simple-monitor {
uses fpcbase:report;
}
case bulk-monitors {
list reports {
uses fpcbase:report;
}
}
}
}
// Added as part of the augment issue
// TODO - Remove once resolved
case downlink-data-notification {
leaf notification-message-type {
type string;
}
leaf notification-dpn-id {
type fpcbase:fpc-dpn-id;
}
leaf session-id {
type uint64;
}
leaf client-id {
type fpcagent:client-identifier;
}
leaf op-id {
type fpcagent:op-identifier;
}
}
}
}
}