Scalable Simulation Framework
Manual IP address aggregation in SSFNet

In the DML configuration listing below the cidr attributes are shown in boldface for readability.

campus2.dml complete configuration file


# campus2.dml 
# Note: to compare with the drawing campus2.pdf, for each router the interfaces 
# are numbered beginning at about "12 o'clock" and increasing clockwise

_schema [_find .schemas.Net]

   Net [
     frequency 100000000
     AS_status boundary
     ospf_area 0

     traffic [
       pattern [
         client 2
         servers [port 10 nhi_range [from 1:2(0) to 1:5(0)]]
       ]
       pattern [
         client 3
         servers [port 10 nhi_range [from 1:2(0) to 1:5(0)]]
       ]
     ]

     Net [id 0 cidr 0 _extends .networks.network0.Net]
     Net [id 1 cidr 1 _extends .networks.network1.Net]
     Net [id 2 cidr 2 _extends .networks.network2.Net]
     Net [id 3 cidr 3 _extends .networks.network3.Net]

     # router between net 0 and net 2
     router [ id 4
       graphics [x 400 y 300]
       interface [ id 0 _extends .dictionary.1Gb ]
       interface [ id 1 _extends .dictionary.1Gb ]
       interface [ id 2 _extends .dictionary.100Mb ]
       interface [ id 3 _extends .dictionary.100Mb ]
       _find .dictionary.routerGraph.graph
     ]

     # router between net 0 and net 3
     router [ id 5
       graphics [x 700 y 360]
       interface [ id 0 _extends .dictionary.1Gb ]
       interface [ id 1 _extends .dictionary.100Mb ]
       interface [ id 2 _extends .dictionary.100Mb ]
       interface [ id 3 _extends .dictionary.1Gb ]
       _find .dictionary.routerGraph.graph
     ]

     # this link gets top-level cidr block
     link [cidr 4 attach 4(1) attach 5(3) delay 0.005]

     # links from backbone net 0 to routers 4, 5, 1:0 will get addresses
     # from the block of net 0
     link [cidr 0/3 attach 0:0(2) attach 4(0) delay 0.01]
     link [cidr 0/4 attach 0:1(1) attach 5(0) delay 0.01]
     link [cidr 0/5 attach 0:2(0) attach 1:0(3) delay 0.01]

     # links to connect router 4 to net 2 will get addresses
     # from the block of network2
     link [cidr 2/4 attach 4(2) attach 2:1(0) delay 0.005]
     link [cidr 2/3 attach 4(3) attach 2:0(0) delay 0.005]

     # similarly links to connect router 5 to network3 will get addresses
     # from the cidr block of network3 
     link [cidr 3/4 attach 5(2) attach 3:0(0) delay 0.005]
     link [cidr 3/5 attach 5(1) attach 3:1(0) delay 0.005]
     
     # ospfoptions control the printing of the diagnostic output
     ospfoptions [
       show_ifaces      false # show ospf interface data structure
       show_AS_area     false # show AS and area number
       show_rtr_type    false # show router types
       show_hello_pkts  false # show hello packets and link connection
       show_lsas        false # show lsa packets
       show_lsdb        false # show link state databases
       show_rtg_tbl     false  # show routing tables
     ]
   ]

   #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
   # 
   # Here is a database of networks:
   #
   #   network0
   #     is a small 1Gb backbone composed of 3 identical routers, no hosts.
   #     It can be used as an ospf backbone, or as a transit AS in the tests.
   #
   #   network2
   #     just routers, access lans and p2p links,
   #     Two client hosts per each access lan for illustration; 
   #     all hosts are identical
   #
   #   network3
   #     just routers, access lans and p2p links,
   #     Two client hosts per each access lan for illustration; 
   #     all hosts are identical
   #
   #   network1
   #     a small server farm with two servers attached p2p to 
   #     each of two routers

   networks [
    network0 [
     Net [
      router [ id 0
       graphics [ x 300 y 200]
       interface [ id 0 _extends .dictionary.1Gb ]
       interface [ id 1 _extends .dictionary.1Gb ]
       interface [ id 2 _extends .dictionary.1Gb ]    # not attached
       _find .dictionary.routerGraph.graph
      ]
      router [ id 1
       graphics [ x 600 y 200]
       interface [ id 0 _extends .dictionary.1Gb ]
       interface [ id 1 _extends .dictionary.1Gb ]    # not attached
       interface [ id 2 _extends .dictionary.1Gb ]
       _find .dictionary.routerGraph.graph
      ]
      router [ id 2
       graphics [ x 600 y 100]
       interface [ id 0 _extends .dictionary.1Gb ]    # not attached
       interface [ id 1 _extends .dictionary.1Gb ]
       interface [ id 2 _extends .dictionary.1Gb ]
       _find .dictionary.routerGraph.graph
      ]

      link [ cidr 0 attach 0(1) attach 1(2) delay 0.01] # 10 ms delay
      link [ cidr 1 attach 1(0) attach 2(1) delay 0.01]
      link [ cidr 2 attach 0(0) attach 2(2) delay 0.01]
     ]
    ]

    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    network2 [
     Net [
      router [ id 0
       graphics [ x 300 y 400]
       interface [ id 0 _extends .dictionary.100Mb ]   # not attached
       interface [ id 1 _extends .dictionary.100Mb ]
       interface [ id 2 _extends .dictionary.100Mb ]
       _find .dictionary.routerGraph.graph
      ]
      router [ id 1
       graphics [ x 410 y 400]
       interface [ id 0 _extends .dictionary.100Mb ]   # not attached
       interface [ id 1 _extends .dictionary.100Mb ]
       interface [ id 2 _extends .dictionary.100Mb ]
       _find .dictionary.routerGraph.graph
      ]
      router [ id 2
       graphics [ x 300 y 500]
       interface [ id 0 _extends .dictionary.100Mb ]
       interface [ id 1 _extends .dictionary.100Mb ]
       interface [ id 2 _extends .dictionary.100Mb ]
       interface [ id 3 _extends .dictionary.10Mb ]
       _find .dictionary.routerGraph.graph
      ]
      router [ id 3
       graphics [ x 450 y 500]
       interface [ id 0 _extends .dictionary.100Mb ]
       interface [ id 1 _extends .dictionary.100Mb ]
       interface [ id 2 _extends .dictionary.100Mb ]
       interface [ id 3 _extends .dictionary.100Mb ]
       _find .dictionary.routerGraph.graph
      ]
      router [ id 4
       graphics [ x 300 y 600]
       interface [ id 0 _extends .dictionary.100Mb ]
       interface [ id 1 _extends .dictionary.10Mb ]
       _find .dictionary.routerGraph.graph
      ]
      router [ id 5
       graphics [ x 450 y 600]
       interface [ id 0 _extends .dictionary.100Mb ]
       interface [ id 1 _extends .dictionary.10Mb ]
       interface [ id 2 _extends .dictionary.100Mb ]
       _find .dictionary.routerGraph.graph
      ]
      router [ id 6
       graphics [ x 400 y 700]
       interface [ id 0 _extends .dictionary.100Mb ]
       interface [ id 1 _extends .dictionary.10Mb ]
       interface [ id 2 _extends .dictionary.10Mb ]
       interface [ id 3 _extends .dictionary.10Mb ]
       _find .dictionary.routerGraph.graph
      ]

      # hosts on link 1/5 (lan)
      host [ id 7
       graphics [ x 200 y 500]
       nhi_route [dest default interface 0 next_hop 2(3)] 
       _extends .dictionary.client10Mb
      ]
      host [ id 8
       graphics [ x 225 y 525]
       nhi_route [dest default interface 0 next_hop 2(3)] 
       _extends .dictionary.client10Mb
      ]

      # hosts on link 1/6 (lan)
      host [id 9
       graphics [ x 200 y 600]
       nhi_route [dest default interface 0 next_hop 4(1)] 
       _extends .dictionary.client10Mb
      ]
      host [id 10
       graphics [ x 235 y 626]
       nhi_route [dest default interface 0 next_hop 4(1)] 
       _extends .dictionary.client10Mb
      ]

      # hosts on link 2/2 (lan)
      host [id 11
       graphics [ x 530 y 522]
       nhi_route [dest default interface 0 next_hop 3(1)] 
       _extends .dictionary.client10Mb
      ]
      host [id 12
       graphics [ x 560 y 500]
       nhi_route [dest default interface 0 next_hop 3(1)] 
       _extends .dictionary.client10Mb
      ]

      # hosts on link 2/4/1 (lan)
      host [id 13 
       graphics [ x 535 y 630]
       nhi_route [dest default interface 0 next_hop 5(1)] 
       _extends .dictionary.client10Mb
      ]
      host [id 14 
       graphics [ x 560 y 610]
       nhi_route [dest default interface 0 next_hop 5(1)] 
       _extends .dictionary.client10Mb
      ]

      # hosts on link 2/4/3/1 (lan)
      host [id 15
       graphics [ x 322 y 718]
       nhi_route [dest default interface 0 next_hop 6(3)] 
       _extends .dictionary.client10Mb
      ]
      host [id 16
       graphics [ x 355 y 727]
       nhi_route [dest default interface 0 next_hop 6(3)] 
       _extends .dictionary.client10Mb
      ]

      # hosts on link 2/4/3/2 (lan)
      host [id 17 
       graphics [ x 397 y 736]
       nhi_route [dest default interface 0 next_hop 6(2)] 
       _extends .dictionary.client10Mb
      ]
      host [id 18
       graphics [ x 430 y 746]
       nhi_route [dest default interface 0 next_hop 6(2)] 
       _extends .dictionary.client10Mb
      ]

      # hosts on link 2/4/3/3 (lan)
      host [id 19
       graphics [ x 473 y 769]
       nhi_route [dest default interface 0 next_hop 6(1)]  
       _extends .dictionary.client10Mb
      ]
      host [id 20
       graphics [ x 516 y 758]
       nhi_route [dest default interface 0 next_hop 6(1)] 
       _extends .dictionary.client10Mb
      ]

      # comment: we could also use an array for all hosts
      # host [idrange [from 7 to 20]
      #   _extends .dictionary.client10Mb ]

      link [ cidr 1/1 attach 0(1) attach 1(2) delay 0.001 ]
      link [ cidr 1/2 attach 0(2) attach 2(0) delay 0.001 ]
      link [ cidr 1/3 attach 2(1) attach 3(3) delay 0.01 ]
      link [ cidr 1/4 attach 2(2) attach 4(0) delay 0.005 ]
      link [ cidr 1/5 graphics [x 200 y 480] attach 2(3) attach 7(0) attach 8(0) delay 0.003 ]
      link [ cidr 1/6 graphics [x 200 y 580] attach 4(1) attach 9(0) attach 10(0) delay 0.001 ]
      link [ cidr 2/1 attach 1(1) attach 3(0) delay 0.001 ]
      link [ cidr 2/2 graphics [x 530 y 510] attach 3(1) attach 11(0) attach 12(0) delay 0.001 ]
      link [ cidr 2/3 attach 3(2) attach 5(0) delay 0.001 ]
      link [ cidr 2/4/1 graphics [x 535 y 610] attach 5(1) attach 13(0) attach 14(0) delay 0.001 ]
      link [ cidr 2/4/2 attach 5(2) attach 6(0) delay 0.001 ] # added by msc
      link [ cidr 2/4/3/1 graphics [x 322 y 705] attach 6(3) attach 15(0) attach 16(0) delay 0.001 ]
      link [ cidr 2/4/3/2 graphics [x 397 y 716] attach 6(2) attach 17(0) attach 18(0) delay 0.001 ]
      link [ cidr 2/4/3/3 graphics [x 473 y 749] attach 6(1) attach 19(0) attach 20(0) delay 0.001 ]

     ]
    ]  # end of network2

    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    network3 [
     Net [
      router [ id 0
       graphics [x 610 y 450]
       interface [ id 0 _extends .dictionary.100Mb ]   # not attached
       interface [ id 1 _extends .dictionary.100Mb ]
       interface [ id 2 _extends .dictionary.10Mb ]
       interface [ id 3 _extends .dictionary.10Mb ]
       _find .dictionary.routerGraph.graph
      ]
      router [ id 1
       graphics [x 800 y 450]
       interface [ id 0 _extends .dictionary.100Mb ]   # not attached
       interface [ id 1 _extends .dictionary.100Mb ]
       interface [ id 2 _extends .dictionary.100Mb ]
       interface [ id 3 _extends .dictionary.100Mb ]
       _find .dictionary.routerGraph.graph
      ]
      router [ id 2
       graphics [x 712 y 563]
       interface [ id 0 _extends .dictionary.100Mb ]
       interface [ id 1 _extends .dictionary.100Mb ]
       interface [ id 2 _extends .dictionary.10Mb ]
       _find .dictionary.routerGraph.graph
      ]
      router [ id 3
       graphics [x 843 y 563]
       interface [ id 0 _extends .dictionary.100Mb ]
       interface [ id 1 _extends .dictionary.10Mb ]
       interface [ id 2 _extends .dictionary.10Mb ]
       interface [ id 3 _extends .dictionary.100Mb ]
       _find .dictionary.routerGraph.graph
      ]

      # hosts on link 0 (lan)
      host [ id 4
       graphics [x 600 y 510]
       nhi_route [dest default interface 0 next_hop 0(3)] 
       _extends .dictionary.client10Mb
      ]
      host [ id 5
       graphics [x 620 y 510]
       nhi_route [dest default interface 0 next_hop 0(3)] 
       _extends .dictionary.client10Mb
      ]

      # hosts on link 1 (lan)
      host [id 6 
       graphics [x 650 y 510]
       nhi_route [dest default interface 0 next_hop 0(2)] 
       _extends .dictionary.client10Mb
      ]
      host [id 7 
       graphics [x 670 y 510]
       nhi_route [dest default interface 0 next_hop 0(2)] 
       _extends .dictionary.client10Mb
      ]

      # hosts on link 3/4 (lan)
      host [id 8 
       graphics [x 710 y 600]
       nhi_route [dest default interface 0 next_hop 2(2)] 
       _extends .dictionary.client10Mb
      ]
      host [id 9 
       graphics [x 730 y 600]
       nhi_route [dest default interface 0 next_hop 2(2)] 
       _extends .dictionary.client10Mb
      ]

      # hosts on link 3/5/1 (lan)
      host [id 10
       graphics [x 820 y 650]
       nhi_route [dest default interface 0 next_hop 3(2)] 
       _extends .dictionary.client10Mb
      ]
      host [id 11
       graphics [x 840 y 650]
       nhi_route [dest default interface 0 next_hop 3(2)] 
       _extends .dictionary.client10Mb
      ]

      # hosts on link 3/5/2 (lan)
      host [id 12
       graphics [x 900 y 700]
       nhi_route [dest default interface 0 next_hop 3(1) ] 
       _extends .dictionary.client10Mb
      ]
      host [id 13
       graphics [x 930 y 700]
       nhi_route [dest default interface 0 next_hop 3(1)] 
       _extends .dictionary.client10Mb
      ]

      link [ cidr 0 graphics [x 600 y 500] attach 0(3) attach 4(0) attach 5(0) delay 0.001 ]
      link [ cidr 1 graphics [x 650 y 500] attach 0(2) attach 6(0) attach 7(0) delay 0.001 ]
      link [ cidr 2 attach 0(1) attach 1(3) delay 0.01 ]
      link [ cidr 3/1 attach 1(2) attach 2(0) delay 0.003 ]
      link [ cidr 3/2 attach 2(1) attach 3(3) delay 0.003 ]
      link [ cidr 3/3 attach 1(1) attach 3(0) delay 0.003 ]
      link [ cidr 3/4 graphics [x 710 y 590] attach 2(2) attach 8(0) attach 9(0) delay 0.001 ]
      link [ cidr 3/5/1 graphics [x 820 y 630] attach 3(2) attach 10(0) attach 11(0) delay 0.001 ]
      link [ cidr 3/5/2 graphics [x 900 y 690] attach 3(1) attach 12(0) attach 13(0) delay 0.001 ]

     ]
    ]  # end of network3

    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    network1 [
     Net [
      router [ id 0
       graphics [ x 800 y 100]
       interface [ id 0 _extends .dictionary.1Gb ]
       interface [ id 1 _extends .dictionary.1Gb ]
       interface [ id 2 _extends .dictionary.1Gb ]
       interface [ id 3 _extends .dictionary.1Gb ]   # not attached
       _find .dictionary.routerGraph.graph
      ]
      router [ id 1
       graphics [ x 800 y 200]
       interface [ id 0 _extends .dictionary.1Gb ]
       interface [ id 1 _extends .dictionary.1Gb ]
       interface [ id 2 _extends .dictionary.1Gb ]
       _find .dictionary.routerGraph.graph
      ]

      host [ id 2
       graphics [ x 900 y 80]
       route [dest default interface 0] 
       _extends .dictionary.server1Gb
      ]
      host [ id 3
       graphics [ x 900 y 120]
       route [dest default interface 0] 
       _extends .dictionary.server1Gb
      ]
      host [ id 4
       graphics [ x 900 y 160]
       route [dest default interface 0] 
       _extends .dictionary.server1Gb
      ]
      host [ id 5
       graphics [ x 900 y 180]
       route [dest default interface 0] 
       _extends .dictionary.server1Gb
      ]
      link [ cidr 0 attach 0(2) attach 1(0) delay 0.001 ]
      link [ cidr 1/0 attach 0(0) attach 2(0) delay 0.001 ]
      link [ cidr 1/1 attach 0(1) attach 3(0) delay 0.001 ]
      link [ cidr 2/0 attach 1(1) attach 4(0) delay 0.001 ]
      link [ cidr 2/1 attach 1(2) attach 5(0) delay 0.001 ]
     ]
    ]  # end of network1

   ]  # end of networks database

   # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

   dictionary [

    # typical nodes
    client10Mb [
     interface [ id 0 _extends .dictionary.10Mb]
     _find .dictionary.clientGraph.graph
    ]
    server1Gb [
     interface [ id 0 _extends .dictionary.1Gb]
     _find .dictionary.serverGraph.graph
    ]

    # interface specs
    10Mb [
      bitrate 10000000     # 10 million bits per second
      latency 0.001        # 1 ms NIC latency, in seconds (on-card delay)
    ]
    100Mb [
      bitrate 100000000    # 100 million bits per second
      latency 0.0001       # 0.1 ms NIC latency, in seconds (on-card delay)
    ]
    1Gb [
      bitrate 1000000000   # billion bits per second
      latency 0.000001     # 1 us NIC latency, in seconds (on-card delay)
    ]

    # TCP initial parameters
    tcpinit [
      ISS 10000            # initial sequence number
      MSS 1000             # maximum segment size
      RcvWndSize  32       # receive buffer size
      SendWndSize 32       # maximum send window size
      SendBufferSize 128    # send buffer size
      MaxRexmitTimes 12    # maximum retransmission times before drop
      TCP_SLOW_INTERVAL 0.5# granularity of TCP slow timer
      TCP_FAST_INTERVAL 0.2# granularity of TCP fast(delay-ack) timer
      MSL 60.0             # maximum segment lifetime
      MaxIdleTime 600.0    # maximum idle time for drop a connection
      delayed_ack false    # delayed ack option
      fast_recovery true   # implement fast recovery algorithm
      show_report true     # print terse TCP connection diagnostics
    ]

    # Three protocol graphs.
    routerGraph [graph [
      ProtocolSession [name ip use SSF.OS.IP]
      ProtocolSession [name ospf use SSF.OS.OSPF.sOSPF]
    ]]

    # the client-server protocol needs to agree on some things
    appsession [
      request_size  4         # client request datagram size (bytes)
      show_report true        # print client-server session summary report
      debug false             # print verbose client/server diagnostics
    ]

    clientGraph [graph [
      ProtocolSession [
        name client use SSF.OS.TCP.test.tcpClient
        start_time 1.0      # earliest time to send request to server
        start_window 5.0    # send request to server at randomly chosen time
                            # in interval [start_time, start_time+start_window]
        file_size 1000000   # requested file size (payload bytes)
        _find .dictionary.appsession.request_size
        _find .dictionary.appsession.show_report
        _find .dictionary.appsession.debug
      ]
      ProtocolSession [name socket use SSF.OS.Socket.socketMaster]
      ProtocolSession [name tcp use SSF.OS.TCP.tcpSessionMaster
          _find .dictionary.tcpinit]
      ProtocolSession [name ip use SSF.OS.IP]
    ]]

    serverGraph [graph [
      ProtocolSession [
        name server use SSF.OS.TCP.test.tcpServer
        port 10            # server's well known port
        _find .dictionary.appsession.request_size
        _find .dictionary.appsession.show_report
        _find .dictionary.appsession.debug
      ]
      ProtocolSession [name socket use SSF.OS.Socket.socketMaster]
      ProtocolSession [name tcp use SSF.OS.TCP.tcpSessionMaster
          _find .dictionary.tcpinit]
      ProtocolSession [name ip use SSF.OS.IP]
    ]]
   ]