// This is a commented JSON data file. The comments must stripped from the
// file before passing it to a JSON parser. This can be done various way
// including the JavaScript JSON.minify() function or a simple sed script
// such as "catting" this file through sed -e '|s//.*$||g'.


// This file represents the network configuration for the cord demo pod number
// two (2).
{
    "ports" : {

        // Leaf-1/port-1 connected to cord-r2-s1/eth0
        "of:0000000000000021/1" : {
            "interfaces" : [
                {
                    "ips" : [ "10.3.1.254/24" ] // Represents a fake gateway
                                                // for this subnet. ONOS will
                                                // ARP this and respond.
                }
            ]
        },

        // Leaf-1/port-2 connected to cord-r2-s2/eth0
        "of:0000000000000021/2" : {
            "interfaces" : [
                {
                    "ips" : [ "10.3.1.254/24" ] // Represents a fake gateway
                                                // for this subnet. ONOS will
                                                // ARP this and respond.
                },
                {
                    "vlan" : "1000" // cross-connect s-tag 1000 to Tibit OLT
                },
                // Need to specify the public IP for the vSG
                {
                    "ips" : [ "10.3.1.130/32" ] // vSG public IP address /32
                }
            ]
        },

	// Leaf-1/port-129 connected to Tibit OLT
        // The physical port is port 25, but we are using a break out cable and thus the switch
        // create virtual ports
        "of:0000000000000021/129" : {
            "interfaces" : [
                {
                    "name" : "tibit-olt", // unused
                    "vlan" : "1000" // cross-connect s-tag 42 to vSG
                }
            ]
        },

        // Leaf-2/port-3 connected to cord-r2-s3/eth0
        "of:0000000000000022/3" : {
            "interfaces" : [
                {
                    "ips" : [ "10.3.2.254/24" ] // Represents a fake gateway
                                                // for this subnet. ONOS will
                                                // ARP this and respond.
                }
            ]
        },

        // Leaf-2/port-4 connected to cord-r2-s4/eth0
        "of:0000000000000022/4" : {
            "interfaces" : [
                {
                    "ips" : [ "10.3.2.254/24" ] // Represents a fake gateway
                                                // for this subnet. ONOS will
                                                // ARP this and respond.
                }
            ]
        }
    },

    "devices" : {
        "of:0000000000000021" : {
            "segmentrouting" : {
                "name" : "leaf-1",
                "nodeSid" : 101,
                "routerIp" : "10.3.1.254",
                "routerMac" : "cc:37:ab:7c:b9:d6",
                "isEdgeRouter" : true,
                "adjacencySids" : []
            }
        },
        "of:0000000000000022" : {
            "segmentrouting" : {
                "name" : "leaf-2",
                "nodeSid" : 102,
                "routerIp" : "10.3.2.254",
                "routerMac" : "cc:37:ab:7c:ba:da",
                "isEdgeRouter" : true,
                "adjacencySids" : []
            }
        },
        "of:0000000000000011" : {
            "segmentrouting" : {
                "name" : "spine-1",
                "nodeSid" : 103,
                "routerIp" : "10.2.30.1",
                "routerMac" : "cc:37:ab:7c:be:68",
                "isEdgeRouter" : false,
                "adjacencySids" : []
            }
        },
        "of:0000000000000012" : {
            "segmentrouting" : {
                "name" : "spine-2",
                "nodeSid" : 104,
                "routerIp" : "10.2.30.2",
                "routerMac" : "cc:37:ab:7c:bf:ee",
                "isEdgeRouter" : false,
                "adjacencySids" : []
            }
        }
    },
    "links": {
        // spine 1/1 connected to leaf 1/31
        "of:0000000000000011/1-of:0000000000000021/31": {
            "basic": {}
        },

        // spine 1/2 connected to leaf 2/31
        "of:0000000000000011/2-of:0000000000000022/31": {
            "basic": {}
        },

        // spine 2/1 connected to leaf 1/32
        "of:0000000000000012/1-of:0000000000000021/32": {
            "basic": {}
        },

        // spine 2/2 connected to leaf 2/32
        "of:0000000000000012/2-of:0000000000000022/32": {
            "basic": {}
        },

        // leaf 1/31 connected to spine 1/1
        "of:0000000000000021/31-of:0000000000000011/1": {
            "basic": {}
        },

        // leaf 1/32 connected to spine 2/1
        "of:0000000000000021/32-of:0000000000000012/1": {
            "basic": {}
        },

        // leaf 2/31 connected to spine 1/2
        "of:0000000000000022/31-of:0000000000000011/2": {
            "basic": {}
        },

        // leaf 2/23 connected to spine 2/2
        "of:0000000000000022/32-of:0000000000000012/2": {
            "basic": {}
        }
    },
    "hosts" : {
        // cord-r2-s1 iface eth0
        "3c:fd:fe:9e:93:10/-1" : {
            "basic": {
                "ips": ["10.3.1.1"],                  // host IP on fabric
                "location": "of:0000000000000021/1"   // link back to fabric leaf-1/port-1
            }
        },

        // cord-r2-s2 iface eth0
        "3c:fd:fe:9e:8a:88/-1" : {
            "basic": {
                "ips": ["10.3.1.2"],                 // host IP on fabric
                "location": "of:0000000000000021/2"  // link back to fabric leaf-1/port-2
            }
        },

       // fa:16:3e:94:7e:c5
       // fa:16:3e:94:7e:c5
       // OLD: 02:42:0a:03:01:82

        "fa:16:3e:94:7e:c5/-1" : { // vSG1
            "basic": {
                "ips": ["10.3.1.130"], // vSG1 public IP address
                "location": "of:0000000000000001/5"
            }
        },

	// OLD: 02:42:0a:03:01:83
        "fa:16:3e:91:82:6a/-1" : { // vSG1 VM
            "basic" : {
                "ips": ["10.3.1.131"],
                "location": "of:0000000000000001/5"
             }
         },

        // cord-r2-s3 iface eth0
        "3c:fd:fe:9e:94:98/-1" : {
            "basic": {
                "ips": ["10.3.2.1"],                 // host IP on fabric
                "location": "of:0000000000000022/3"  // link back to fabric leaf-2/port-3
            }
        },

        // cord-r2-s4 iface eth0
        "3c:fd:fe:9e:97:98/-1" : {
            "basic": {
                "ips": ["10.3.2.2"],                 // host IP on fabric
                "location": "of:0000000000000022/4"  // link back to fabric leaf-2/port-4
            }
        }
    },
    "apps" : {
        "org.onosproject.core" : {
            "core" : {
                "linkDiscoveryMode" : "STRICT" // enable strict link validation
            }
        }
    }
}
