/*
WARNING:
This yang model is just for fuction ONOS opensource project demo purpose only,
And is subject to change in future, Huawei does not commit provide compatibilty
in commercial product.
*/
module ne-tnlm {
    namespace "ne-tnlm";
    prefix tnlm;

    import ne-l3vpncomm-type {
        prefix l3vpncomm-type;
    }
    import ne-tnlm-type {
        prefix tnlmtype;
    }
    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 "VRP V800R010 Schema";
    revision "2014-12-25" {
        reference "Huawei VRPV8 Schema";
    }
    container devices {
        list device {
            key deviceid;
            leaf deviceid {
                type string;
            }
            container tnlm {
                container tunnelPolicys {
                    list tunnelPolicy {
                        key tnlPolicyName;
                        leaf tnlPolicyName {
                            type string;
                        }
                        leaf tnlPolicyType {
                            type tnlmtype:tnlmbaseTnlPolicyType;
                        }
                        container tpNexthops {
                            list tpNexthop {
                                key nexthopIPaddr;
                                leaf nexthopIPaddr {
                                    type "l3vpncomm-type:ipv4Address";
                                }
                                leaf tnlPolicyName {
                                    type string;
                                }
                                container tpTunnels {
                                    list tpTunnel {
                                        key "tunnelName";
                                        leaf autoTunnel {
                                            type boolean;
                                        }
                                        leaf tunnelName {
                                            type string;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}