comments {
Joe Macker NRL
Last updated: Sept 2010,2015(to fix mobility script)
Nov 2010  Jeff Ahrenholz - updated for new services model and renamed
 (was 2groups_10nodes_smf.imn)

This scenario is a simple SMF example for testing multicast within CORE.

There are several dependencies for these scenarios to work;

nrlsmf must be installed and the binary must be within the path when executing.
This should also be built along with protolib from the NRL pf.itd.nrl.navy.mil
repository or from nightly snapshots by using the Makefile.core build file.
This avoids some of the potential problems that arise with protolib call and
proper netns support in various kernel releases.  For now the Makefile.core
approach patches around the problem.

This scenario will launch 10 quagga manet-ospf and smf classical flooding
router nodes. A mobility pattern can be used to cause periodic fragmentation
and coalescing among 5 groups that move together as a somewhat randomized
cluster.

Within netns and core the following must be used as nrlsmf params.  hash mode
and instance ids.
This script uses nodenames as instance ids and MD5 as the hash mode.
Distributed optimized relay selection is not provided in this example but works
in nrlsmf with both quagga manetospf-mdr and with nrlolsr or newer nhdp code
being developed.  Relays can also be manually configured if that is of some use
in a scneario.  Classical flodding still provides duplication detection in this
mode but of course has additional overhead.

-----
Traffic testing etc.  You can try sending your own multicast apps or use a
testtool.

mgen is recommended as a test tool, but ping -t 5 224.225.226.227 type testing
can also be used.

an example mgen script to source multicast from a terminal window is as follows:

mgen event "on 1 udp dst 224.225.226.227/5000 periodic [1 500]"

this sends 500 bytes packets every second. See mgen users guide for the myriad
of choices/options.

on a receive node terminal the follow can work.

mgen event "join 224.225.226.227" event "listen udp 5000" output <file>
without output it will stream to stdout.
}

node n1 {
    type router
    model mdr
    network-config {
	hostname n1
	!
	interface eth0
	 ip address 10.0.0.1/32
	 ipv6 address a:0::1/128
	!
    }
    iconcoords {186.2364578872143 137.89039496012572}
    labelcoords {186.2364578872143 161.89039496012572}
    canvas c1
    interface-peer {eth0 n11}
    custom-image $CORE_DATA_DIR/icons/normal/router_green.gif
    services {zebra OSPFv3MDR SMF IPForward UserDefined}
    custom-config {
	custom-config-id service:UserDefined:custom-post-config-commands.sh
	custom-command custom-post-config-commands.sh
	config {
	route add default dev eth0
	route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
	}
    }
    custom-config {
	custom-config-id service:UserDefined
	custom-command UserDefined
	config {
	files=('custom-post-config-commands.sh', )
	startidx=35
	cmdup=('sh custom-post-config-commands.sh', )
	}
    }
}

node n2 {
    type router
    model mdr
    network-config {
	hostname n2
	!
	interface eth0
	 ip address 10.0.0.2/32
	 ipv6 address a:0::2/128
	!
    }
    iconcoords {49.97421009111123 297.31725181124926}
    labelcoords {49.97421009111123 321.31725181124926}
    canvas c1
    interface-peer {eth0 n11}
    custom-image $CORE_DATA_DIR/icons/normal/router_green.gif
    services {zebra OSPFv3MDR SMF IPForward UserDefined}
    custom-config {
	custom-config-id service:UserDefined:custom-post-config-commands.sh
	custom-command custom-post-config-commands.sh
	config {
	route add default dev eth0
	route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
	}
    }
    custom-config {
	custom-config-id service:UserDefined
	custom-command UserDefined
	config {
	files=('custom-post-config-commands.sh', )
	startidx=35
	cmdup=('sh custom-post-config-commands.sh', )
	}
    }
}

node n3 {
    type router
    model mdr
    network-config {
	hostname n3
	!
	interface eth0
	 ip address 10.0.0.3/32
	 ipv6 address a:0::3/128
	!
    }
    iconcoords {176.46110847174833 328.14864514530865}
    labelcoords {176.46110847174833 352.14864514530865}
    canvas c1
    interface-peer {eth0 n11}
    custom-image $CORE_DATA_DIR/icons/normal/router_green.gif
    services {zebra OSPFv3MDR SMF IPForward UserDefined}
    custom-config {
	custom-config-id service:UserDefined:custom-post-config-commands.sh
	custom-command custom-post-config-commands.sh
	config {
	route add default dev eth0
	route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
	}
    }
    custom-config {
	custom-config-id service:UserDefined
	custom-command UserDefined
	config {
	files=('custom-post-config-commands.sh', )
	startidx=35
	cmdup=('sh custom-post-config-commands.sh', )
	}
    }
}

node n4 {
    type router
    model mdr
    network-config {
	hostname n4
	!
	interface eth0
	 ip address 10.0.0.4/32
	 ipv6 address a:0::4/128
	!
    }
    iconcoords {145.04062040794378 195.27962082775758}
    labelcoords {145.04062040794378 219.27962082775758}
    canvas c1
    interface-peer {eth0 n11}
    custom-image $CORE_DATA_DIR/icons/normal/router_green.gif
    services {zebra OSPFv3MDR SMF IPForward UserDefined}
    custom-config {
	custom-config-id service:UserDefined:custom-post-config-commands.sh
	custom-command custom-post-config-commands.sh
	config {
	route add default dev eth0
	route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
	}
    }
    custom-config {
	custom-config-id service:UserDefined
	custom-command UserDefined
	config {
	files=('custom-post-config-commands.sh', )
	startidx=35
	cmdup=('sh custom-post-config-commands.sh', )
	}
    }
}

node n5 {
    type router
    model mdr
    network-config {
	hostname n5
	!
	interface eth0
	 ip address 10.0.0.5/32
	 ipv6 address a:0::5/128
	!
    }
    iconcoords {137.9101266949479 257.51849231830334}
    labelcoords {137.9101266949479 281.51849231830334}
    canvas c1
    interface-peer {eth0 n11}
    custom-image $CORE_DATA_DIR/icons/normal/router_green.gif
    services {zebra OSPFv3MDR SMF IPForward UserDefined}
    custom-config {
	custom-config-id service:UserDefined:custom-post-config-commands.sh
	custom-command custom-post-config-commands.sh
	config {
	route add default dev eth0
	route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
	}
    }
    custom-config {
	custom-config-id service:UserDefined
	custom-command UserDefined
	config {
	files=('custom-post-config-commands.sh', )
	startidx=35
	cmdup=('sh custom-post-config-commands.sh', )
	}
    }
}

node n6 {
    type router
    model mdr
    network-config {
	hostname n6
	!
	interface eth0
	 ip address 10.0.0.6/32
	 ipv6 address a:0::6/128
	!
    }
    iconcoords {119.15850324229558 93.2505296351548}
    labelcoords {119.15850324229558 117.2505296351548}
    canvas c1
    interface-peer {eth0 n11}
    custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
    services {zebra OSPFv3MDR SMF IPForward UserDefined}
    custom-config {
	custom-config-id service:UserDefined:custom-post-config-commands.sh
	custom-command custom-post-config-commands.sh
	config {
	route add default dev eth0
	route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
	}
    }
    custom-config {
	custom-config-id service:UserDefined
	custom-command UserDefined
	config {
	files=('custom-post-config-commands.sh', )
	startidx=35
	cmdup=('sh custom-post-config-commands.sh', )
	}
    }
}

node n7 {
    type router
    model mdr
    network-config {
	hostname n7
	!
	interface eth0
	 ip address 10.0.0.7/32
	 ipv6 address a:0::7/128
	!
    }
    iconcoords {79.1102256826161 50.123535235375556}
    labelcoords {79.1102256826161 74.12353523537556}
    canvas c1
    interface-peer {eth0 n11}
    custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
    services {zebra OSPFv3MDR SMF IPForward UserDefined}
    custom-config {
	custom-config-id service:UserDefined:custom-post-config-commands.sh
	custom-command custom-post-config-commands.sh
	config {
	route add default dev eth0
	route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
	}
    }
    custom-config {
	custom-config-id service:UserDefined
	custom-command UserDefined
	config {
	files=('custom-post-config-commands.sh', )
	startidx=35
	cmdup=('sh custom-post-config-commands.sh', )
	}
    }
}

node n8 {
    type router
    model mdr
    network-config {
	hostname n8
	!
	interface eth0
	 ip address 10.0.0.8/32
	 ipv6 address a:0::8/128
	!
    }
    iconcoords {159.90259315202974 8.220638318379141}
    labelcoords {159.90259315202974 32.220638318379144}
    canvas c1
    interface-peer {eth0 n11}
    custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
    services {zebra OSPFv3MDR SMF IPForward UserDefined}
    custom-config {
	custom-config-id service:UserDefined:custom-post-config-commands.sh
	custom-command custom-post-config-commands.sh
	config {
	route add default dev eth0
	route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
	}
    }
    custom-config {
	custom-config-id service:UserDefined
	custom-command UserDefined
	config {
	files=('custom-post-config-commands.sh', )
	startidx=35
	cmdup=('sh custom-post-config-commands.sh', )
	}
    }
}

node n9 {
    type router
    model mdr
    network-config {
	hostname n9
	!
	interface eth0
	 ip address 10.0.0.9/32
	 ipv6 address a:0::9/128
	!
    }
    iconcoords {150.43010603614704 165.70781621981482}
    labelcoords {150.43010603614704 189.70781621981482}
    canvas c1
    interface-peer {eth0 n11}
    custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
    services {zebra OSPFv3MDR SMF IPForward UserDefined}
    custom-config {
	custom-config-id service:UserDefined:custom-post-config-commands.sh
	custom-command custom-post-config-commands.sh
	config {
	route add default dev eth0
	route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
	}
    }
    custom-config {
	custom-config-id service:UserDefined
	custom-command UserDefined
	config {
	files=('custom-post-config-commands.sh', )
	startidx=35
	cmdup=('sh custom-post-config-commands.sh', )
	}
    }
}

node n10 {
    type router
    model mdr
    network-config {
	hostname n10
	!
	interface eth0
	 ip address 10.0.0.10/32
	 ipv6 address a:0::10/128
	!
    }
    iconcoords {64.19289632467826 42.49909518554088}
    labelcoords {64.19289632467826 66.49909518554088}
    canvas c1
    interface-peer {eth0 n11}
    custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
    services {zebra OSPFv3MDR SMF IPForward UserDefined}
    custom-config {
	custom-config-id service:UserDefined:custom-post-config-commands.sh
	custom-command custom-post-config-commands.sh
	config {
	route add default dev eth0
	route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
	}
    }
    custom-config {
	custom-config-id service:UserDefined
	custom-command UserDefined
	config {
	files=('custom-post-config-commands.sh', )
	startidx=35
	cmdup=('sh custom-post-config-commands.sh', )
	}
    }
}

node n11 {
    type wlan
    network-config {
	hostname wlan11
	!
	interface wireless
	 ip address 10.0.0.0/32
	 ipv6 address a:0::0/128
	!
	mobmodel
	coreapi
	basic_range
    ns2script
	!
    }
    iconcoords {0 0}
    labelcoords {0 0}
    canvas c1
    interface-peer {e0 n1}
    interface-peer {e1 n2}
    interface-peer {e2 n3}
    interface-peer {e3 n4}
    interface-peer {e4 n5}
    interface-peer {e5 n6}
    interface-peer {e6 n7}
    interface-peer {e7 n8}
    interface-peer {e8 n9}
    interface-peer {e9 n10}
    custom-config {
	custom-config-id ns2script
	custom-command {10 3 11 10 10}
	config {
	file=sample4.scen
	refresh_ms=50
	loop=1
	autostart=5
	map=
	}
    }
    custom-config {
	custom-config-id basic_range
	custom-command {3 3 9 9 9}
	config {
	range=200
	bandwidth=54000000
	jitter=0
	delay=50000
	error=0
	}
    }
}

link l1 {
    nodes {n11 n1}
    bandwidth 54000000
    delay 50000
}

link l2 {
    nodes {n11 n2}
    bandwidth 54000000
    delay 50000
}

link l3 {
    nodes {n11 n3}
    bandwidth 54000000
    delay 50000
}

link l4 {
    nodes {n11 n4}
    bandwidth 54000000
    delay 50000
}

link l5 {
    nodes {n11 n5}
    bandwidth 54000000
    delay 50000
}

link l6 {
    nodes {n11 n6}
    bandwidth 54000000
    delay 50000
}

link l7 {
    nodes {n11 n7}
    bandwidth 54000000
    delay 50000
}

link l8 {
    nodes {n11 n8}
    bandwidth 54000000
    delay 50000
}

link l9 {
    nodes {n11 n9}
    bandwidth 54000000
    delay 50000
}

link l10 {
    nodes {n11 n10}
    bandwidth 54000000
    delay 50000
}

canvas c1 {
    name {Canvas1}
    wallpaper-style {upperleft}
    wallpaper {sample4-bg.jpg}
    size {1000 750}
}

option global {
    interface_names no
    ip_addresses yes
    ipv6_addresses yes
    node_labels yes
    link_labels yes
    show_api no
    background_images no
    annotations yes
    grid no
    traffic_start 0
}

option session {
}

