# Copyright (c) 2019 Erik Schilling
# ALL RIGHTS RESERVED.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

nsd:nsd-catalog:
    nsd:
    -   id: vnffg-example
        short-name: vnffg-example
        name: vnffg-example
        constituent-vnfd:
        -   member-vnf-index: 1
            vnfd-id-ref: vnfd-traffic-view
        -   member-vnf-index: 2
            vnfd-id-ref: vnfd-traffic-view
        -   member-vnf-index: 3
            vnfd-id-ref: vnfd-traffic-view
        ip-profiles:
        -   description: Inter VNF Link
            ip-profile-params:
                gateway-address: 10.0.0.210
                ip-version: ipv4
                subnet-address: 10.0.0.0/24
                dns-server:
                -   address: 8.8.8.8
                -   address: 8.8.8.9
                dhcp-params:
                  count: 200
                  start-address: 10.0.0.1
            name: ipprofileA
        vld:
            -   id: vld1
                name: vld1-name
                short-name: vld1-sname
                type: ELAN
                ip-profile-ref: ipprofileA
                vnfd-connection-point-ref:
                -   member-vnf-index-ref: 1
                    vnfd-id-ref: vnfd-traffic-view
                    vnfd-connection-point-ref: eth0
                    ip-address: 10.0.0.10
                -   member-vnf-index-ref: 2
                    vnfd-id-ref: vnfd-traffic-view
                    vnfd-connection-point-ref: eth0
                    ip-address: 10.0.0.11
                -   member-vnf-index-ref: 3
                    vnfd-id-ref: vnfd-traffic-view
                    vnfd-connection-point-ref: eth0
                    ip-address: 10.0.0.12
        vnffgd:
            -   id: vnffg1
                name: vnffg1-name
                short-name: vnffg1-sname
                description: vnffg1-description
                vendor: vnffg1-vendor
                version: '1.0'
                rsp:
                -   id: rsp1
                    name: rsp1-name
                    vnfd-connection-point-ref:
                    -   member-vnf-index-ref: 2
                        order: 0
                        vnfd-id-ref: vnfd-traffic-view
                        vnfd-ingress-connection-point-ref: eth0
                        vnfd-egress-connection-point-ref: eth0
                    -   member-vnf-index-ref: 3
                        order: 1
                        vnfd-id-ref: vnfd-traffic-view
                        vnfd-ingress-connection-point-ref: eth0
                        vnfd-egress-connection-point-ref: eth0
                classifier:
                -   id: class1
                    name: class1-name
                    rsp-id-ref: rsp1
                    member-vnf-index-ref: 1
                    vnfd-id-ref: vnfd-traffic-view
                    vnfd-connection-point-ref: eth0
                    match-attributes:
                    -   id: match1
                        ip-proto: 6 # TCP
                        source-ip-address: 10.0.0.2
                        destination-ip-address: 10.0.0.4
                        source-port: 0
                        destination-port: 80

