157 | | Your slice will look something like the one below (see [attachment:sampleDiagram.png]). The overall configuration should be the same, with two end hosts, named hostA and hostB, and four routers (top, left, right, bottom) in a diamond configuration. The host names, interface names, and MAC addresses will be different, depending on the actual resources assigned to your slice. |
| 157 | Once you have the '''myslice.png''' on your local machine, open it in a browser other viewer program. Your slice will look something like the one below (see [attachment:sampleDiagram.png]). The overall configuration should be the same, with two end hosts, named hostA and hostB, and four routers (top, left, right, bottom) in a diamond configuration. The host names, interface names, and MAC addresses will be different, depending on the actual resources assigned to your slice. |
161 | | The four routers interconnected by solid lines are your "core network," which runs a non-standard, non-IP protocol. The dashed lines out to the end hosts carry standard IP traffic. |
| 161 | The four routers interconnected by solid lines are your "core network," which will run a non-standard, non-IP protocol. The dashed lines out to the end hosts carry standard IP traffic. |
| 162 | |
| 163 | == Turn off internet protocol == |
| 164 | |
| 165 | At this point, your network is still running IP. You can check by running a ping. In your '''hostb''' terminal window, run this command. |
| 166 | |
| 167 | {{{ |
| 168 | ping -c 3 hostb |
| 169 | }}} |
| 170 | |
| 171 | The command should succeed, with output like this: |
| 172 | |
| 173 | {{{ |
| 174 | PING hostB-link-B (10.10.6.2) 56(84) bytes of data. |
| 175 | 64 bytes from hostB-link-B (10.10.6.2): icmp_seq=1 ttl=61 time=1.38 ms |
| 176 | 64 bytes from hostB-link-B (10.10.6.2): icmp_seq=2 ttl=61 time=1.19 ms |
| 177 | 64 bytes from hostB-link-B (10.10.6.2): icmp_seq=3 ttl=61 time=1.53 ms |
| 178 | |
| 179 | --- hostB-link-B ping statistics --- |
| 180 | 3 packets transmitted, 3 received, 0% packet loss, time 2004ms |
| 181 | rtt min/avg/max/mdev = 1.193/1.370/1.531/0.138 ms |
| 182 | }}} |
| 183 | |
| 184 | Since our experiment doesn't want IP, let's turn it off. ''On each of your four router hosts,'' run this command: |
| 185 | |
| 186 | {{{ |
| 187 | sh ./stopIP.sh |
| 188 | }}} |
| 189 | |
| 190 | You'll get output like this (the interface names may be different): |
| 191 | |
| 192 | { |
| 193 | Disabling IP on interface eth2 |
| 194 | Disabling IP on interface eth4 |
| 195 | } |
| 196 | |
| 197 | To verify that IP is really off, try another ping. On '''hosta''': |
| 198 | {{{ |
| 199 | ping -c 3 hostb |
| 200 | }}} |
| 201 | |
| 202 | The command should take several seconds to time out, then fail with output like this: |
| 203 | |
| 204 | {{{ |
| 205 | PING hostB-link-B (10.10.6.2) 56(84) bytes of data. |
| 206 | |
| 207 | --- hostB-link-B ping statistics --- |
| 208 | 3 packets transmitted, 0 received, 100% packet loss, time 11999ms |
| 209 | }}} |
165 | | The extractor script produces a click configuration file for each of your routers. The deployment script, '''deployClick.sh''' copies these files to your routers and starts a user-space router on each. Run the script, and you should get output like this: |
166 | | |
167 | | {{{ |
168 | | [mberman@molasses click-example]$ sh deployClick.sh |
169 | | Setting user shell on top.StupidSliceName.emulab-net.emulab.net |
170 | | Changing shell for mberman. |
171 | | Shell changed. |
172 | | Copying top.click to top.StupidSliceName.emulab-net.emulab.net |
173 | | Waiting for click to build on top.StupidSliceName.emulab-net.emulab.net ................... |
174 | | Stopping any running click router on top.StupidSliceName.emulab-net.emulab.net |
175 | | Disabling IP routing on top.StupidSliceName.emulab-net.emulab.net |
176 | | Starting click router on top.StupidSliceName.emulab-net.emulab.net |
177 | | |
178 | | <similar output for {left,right,bottom} routers> |
179 | | }}} |
180 | | |
181 | | Depending on how long you waited between creating your slice and running the '''deployClick.sh''' script (and how powerful your allocated router machines are), you may need to wait a few minutes while click finishes compiling. |
182 | | |
183 | | You are now running a non-IP core network on your four routers, along with a (primitive) non-IP multipath routing algorithm. You're ready to experiment with this configuration. |
| 213 | The extractor script produces a click configuration file for each of your routers. ''On each of your four router hosts,'' run this command: |
| 214 | |
| 215 | {{{ |
| 216 | sh ./startClick.sh |
| 217 | }}} |
| 218 | |
| 219 | You'll get output like this. (Don't worry about the warning messages, Click is just reminding you that you have no IP addresses in your core network.) The shell prompt won't come back, but you'll see the debugging output of the Click router in the terminal window. |
| 220 | |
| 221 | {{{ |
| 222 | Stopping any running Click routers |
| 223 | Starting Click router |
| 224 | top.click:34: While initializing ‘FromDevice@18 :: FromDevice’: |
| 225 | warning: eth2: no IPv4 address assigned |
| 226 | top.click:35: While initializing ‘FromDevice@21 :: FromDevice’: |
| 227 | warning: eth4: no IPv4 address assigned |
| 228 | }}} |
| 229 | |
| 230 | Congratulations! You are now running a non-IP core network on your four routers, along with a (primitive) non-IP multipath routing algorithm. You're ready to experiment with this configuration. |
187 | | Now you'll log into your two edge hosts, '''hostA''' and '''hostB''', and send some traffic between them. Since these end hosts are not running your modified protocol, they'll rely on the '''top''' and '''bottom''' routers to transform their IP packets into your modified protocol on entry to the core network and back into IP packets on exit. |
188 | | |
189 | | In two different windows, use '''ssh -F ssh_config hostA''' and '''ssh -F ssh_config hostB''' to connect to your two end hosts. (Don't forget to work in your '''click-example''' directory.) |
190 | | |
191 | | On '''hostB''', instruct '''nc''' to listen for a UDP connection on port 24565 (or some other port that catches your fancy). |
| 234 | Now you'll use your two edge hosts, '''hostA''' and '''hostB''' to send traffic along your network. Since these end hosts are not running your modified protocol, they'll rely on the '''top''' and '''bottom''' routers to transform their IP packets into your modified protocol on entry to the core network and back into IP packets on exit. |
| 235 | |
| 236 | In your terminal window on '''hostB''', instruct '''nc''' to listen for a UDP connection on port 24565 (or some other port that catches your fancy). |