### Cluster-wide settings ###
# List of host names/addresses constitute ONOS cluster
# NOTE: Order of names affects ZooKeeper myid
cluster.hosts.names = onosdev1, onosdev2, onosdev3, onosdev4

# Back-end module to store topology/flows
cluster.hosts.backend = hazelcast
#cluster.hosts.backend = ramcloud

# Protocol used by RAMCloud cluster (fast+udp by default)
#cluster.hosts.ramcloud.protocol = fast+udp

# Communication method used for Hazelcast communication
#cluster.hosts.hazelcast.network = multicast
cluster.hosts.hazelcast.network = tcp-ip

# Multicast address used by Hazelcast datagrid (224.2.2.3 by default)
# Valid only if cluster.hosts.hazelcast.network is set to "multicast"
#cluster.hosts.hazelcast.multicast.address = 224.2.2.3

# Multicast port used by Hazelcast datagrid (54327 by default)
# Valid only if cluster.hosts.hazelcast.network is set to "multicast"
#cluster.hosts.hazelcast.multicast.port = 54327

### Host-specific settings ###
# IP address of host used for ONOS communication (resolved hostname by default)
#cluster.onosdev1.ip = 192.168.56.11

# Role of host
cluster.onosdev1.role = rc-coord-and-server

# IP address or hostname of host used for ZooKeeper communication (cluster.onosdev1.ip by default)
#cluster.onosdev1.zk.host = 192.168.56.11

# IP address of host used for RAMCloud communication (cluster.onosdev1.ip by default)
#cluster.onosdev1.ramcloud.ip = 192.168.56.11

# Port number used by RAMCloud coordinator (12246 by default)
#cluster.onosdev1.ramcloud.coordinator.port = 12246

# Port number used by RAMCloud server (12242 by default)
#cluster.onosdev1.ramcloud.server.port = 12242

# IP address of host used for Hazelcast communication (cluster.onosdev1.ip by default)
# Valid only if cluster.hosts.hazelcast.network is set to "tcp-ip"
#cluster.onosdev1.hazelcast.ip = 192.168.56.11

# At least role must be specified for all hosts
cluster.onosdev2.role = rc-server
cluster.onosdev3.role = rc-server
cluster.onosdev4.role = rc-server


### SSH settings used for delivering config files ###
# Common username used to login host (current user by default)
#remote.common.ssh.user = mininet

# Host-specific username settings
#remote.onosdev1.ssh.user = mininet
#remote.onosdev2.ssh.user = mininet
