-
Notifications
You must be signed in to change notification settings - Fork 38
Expand file tree
/
Copy pathlf_mcast.bash
More file actions
executable file
·137 lines (118 loc) · 3.98 KB
/
lf_mcast.bash
File metadata and controls
executable file
·137 lines (118 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/bash
#
# NAME: lf_mcast.bash
#
# PURPOSE: Example script to demonstrate creation and activation of multicast traffic endpoints using lf_firemod.pl
#
# NOTES: Much of this script is hard-coded which could could become command-line switches or re-implemented using
# another scripting language.
# General configuration
LF_SCRIPTS=/home/lanforge/scripts
lf_mgr=localhost
report_timer=1000
quiet=yes
# Transmitter configuration
xmit_count=2
xmit_resource=1
xmit_port=eth3
xmit_rate=10000000 # 10 Mbps
xmit_tos=BE # Can give either tag name abbreviation or number here (e.g. VO, VI, BE, BK). See lf_firemod.pl for more info
# Receiver configuration
rcv_count=3
rcv_resource=1
rcv_port_prefix=wlan
# TODO: The lf_firemod.pl script needs adjustments possibly to delete individual endpoints
delete_endpoints() {
echo "> Removing any conflicting named endpoints"
# Delete any existing and receivers transmitters w/ same name
for ((i=1; i<${xmit_count}+1; i+=1))
do
xmit_endp_name=mcast_xmit_${i}
$LF_SCRIPTS/lf_firemod.pl \
--mgr ${lf_mgr} \
--action delete_cxe \
--endp_name ${xmit_endp_name}
for ((j=1; j<${rcv_count}+1; j+=1))
do
rcv_endp_name=mcast_rcv_grp${i}_${j}
$LF_SCRIPTS/lf_firemod.pl \
--mgr ${lf_mgr} \
--action delete_cxe \
--endp_name ${rcv_endp_name}
done
done
}
create_endpoints() {
echo "> Creating ${xmit_count} multicast group transmitter(s) with ${rcv_count} receiver endpoint(s) per transmitter"
# Create transmitters
for ((i=1; i<${xmit_count}+1; i+=1))
do
xmit_port_num=$((10000 + i)) # Transmit and receive port numbers must be same
xmit_endp_name=mcast_xmit_grp${i}
# Create transmitter endpoint
$LF_SCRIPTS/lf_firemod.pl \
--mgr ${lf_mgr} \
--action create_endp \
--resource ${xmit_resource} \
--port_name ${xmit_port} \
--endp_name ${xmit_endp_name} \
--endp_type mc_udp \
--rcv_mcast NO \
--mcast_addr 224.9.9.${i} \
--mcast_port ${xmit_port_num} \
--speed ${xmit_rate} \
--tos ${xmit_tos} \
--quiet ${quiet} \
--report_timer ${report_timer}
done
# Create receivers endpoints, grouped as ${rcv_count} many per transmitter
for ((i=1; i<${xmit_count}+1; i+=1))
do
for ((j=1; j<${rcv_count}+1; j+=1))
do
rcv_port_num=$((10000 + i)) # Transmit and receive port numbers must be same
rcv_port=${rcv_port_prefix}${j} # Port here means network interface
rcv_endp_name=mcast_rcv_grp${i}_${j}
$LF_SCRIPTS/lf_firemod.pl \
--mgr ${lf_mgr} \
--action create_endp \
--resource ${rcv_resource} \
--port_name ${rcv_port} \
--endp_name ${rcv_endp_name} \
--endp_type mc_udp \
--rcv_mcast YES \
--mcast_addr 224.9.9.${i} \
--mcast_port ${rcv_port_num} \
--speed 0 \
--quiet ${quiet} \
--report_timer ${report_timer}
done
done
}
start_endpoints() {
# Start all endpoints in this group (transmitter and receivers)
for ((i=1; i<$xmit_count+1; i+=1))
do
xmit_endp_name=mcast_xmit_grp${i}
# Start transmitter
echo "> Starting multicast group ${i} transmitter endpoint '${xmit_endp_name}'"
$LF_SCRIPTS/lf_firemod.pl \
--mgr $lf_mgr \
--action start_endp \
--endp_name $xmit_endp_name
# Start receivers
echo "> Starting multicast group ${i} receiver endpoint(s) (${rcv_count} total) "
for ((j=1; j<$rcv_count+1; j+=1))
do
rcv_endp_name=mcast_rcv_grp${i}_${j}
$LF_SCRIPTS/lf_firemod.pl \
--mgr $lf_mgr \
--action start_endp \
--endp_name $rcv_endp_name
done
done
}
#delete_endpoints
create_endpoints
start_endpoints
# Script could then randomly start and stop the receivers to cause multicast join and leave messages.