campus2auto.dml complete configuration file


# campus2auto.dml
# Note: to compare with the drawing campus2auto.pdf,
# for each router the interfaces are indexed starting with id = 0
# at about "12 o'clock" position and increasing clockwise.

_schema [_find .schemas.Net]

Net [
  frequency 100000000  # because the fastest link speed is 100 Mbs

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

  # router between net 0 and net 2
     
  router [ id 4
    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
    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
  ]

  # point-to-point link connecting routers 4 and 5
     
  link [ attach 4(1) attach 5(3) delay 0.005]

  # links from backbone Net 0 to routers 4, 5, 1:0 
     
  link [ attach 0:0(2) attach 4(0) delay 0.01]
  link [ attach 0:1(1) attach 5(0) delay 0.01]
  link [ attach 0:2(0) attach 1:0(3) delay 0.01]

  # links to connect router 4 to net 2 
     
  link [ attach 4(2) attach 2:1(0) delay 0.005]
  link [ attach 4(3) attach 2:0(0) delay 0.005]

  # links to connect router 5 to network3 
     
  link [ attach 5(2) attach 3:0(0) delay 0.005]
  link [ attach 5(1) attach 3:1(0) delay 0.005]

  # the enclosing Net is configured as one OSPF area:
     
  AS_status boundary
  ospf_area 0 

  # 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                   
  ] 

  # traffic specification uses globally resolved NHI addresses,
  # that begin with the topmost enclosing Net,
  # thus 'client 2' is interpreted as all clients in Net 2, etc.
     
  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)]]
    ]
  ]

] # end of .Net

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 
# 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.
#
#   network1
#     a small server farm with two servers attached p2p to 
#     each of two routers
#
#   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



networks [
  network0 [
    Net [
      router [ id 0
        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 [ attach 0(1) attach 1(2) delay 0.01] # 10 ms delay
      link [ attach 1(0) attach 2(1) delay 0.01]
      link [ attach 0(0) attach 2(2) delay 0.01]
    ]
    
  ] # end of network0
  
  #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  network1 [
    Net [
      router [ id 0
        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
        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
        route [dest default interface 0] 
        _extends .dictionary.server1Gb
      ]
      host [ id 3
        route [dest default interface 0] 
        _extends .dictionary.server1Gb
      ]
      host [ id 4
        route [dest default interface 0] 
        _extends .dictionary.server1Gb
      ]
      host [ id 5
        route [dest default interface 0] 
        _extends .dictionary.server1Gb
      ]
      
      link [ attach 0(2) attach 1(0) delay 0.001 ]
      link [ attach 0(0) attach 2(0) delay 0.001 ]
      link [ attach 0(1) attach 3(0) delay 0.001 ]
      link [ attach 1(1) attach 4(0) delay 0.001 ]
      link [ attach 1(2) attach 5(0) delay 0.001 ]
    ]
  ]  # end of network1

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

  network2 [
    Net [
      router [ id 0
        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
        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
        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
        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
        interface [ id 0 _extends .dictionary.100Mb ]
        interface [ id 1 _extends .dictionary.10Mb ]
        _find .dictionary.routerGraph.graph
      ]
      router [ id 5
        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
        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 LANs: note that next_hop must be specified as
      # the interface of a router on the LAN for all destination
      # addresses that are not on the same LAN 
      
      host [ id 7
        nhi_route [dest default interface 0 next_hop 2(3)] 
        _extends .dictionary.client10Mb
      ]
      host [ id 8
        nhi_route [dest default interface 0 next_hop 2(3)] 
        _extends .dictionary.client10Mb
      ]

      host [id 9
        nhi_route [dest default interface 0 next_hop 4(1)] 
        _extends .dictionary.client10Mb
      ]
      host [id 10
        nhi_route [dest default interface 0 next_hop 4(1)] 
        _extends .dictionary.client10Mb
      ]

      host [id 11
        nhi_route [dest default interface 0 next_hop 3(1)] 
        _extends .dictionary.client10Mb
      ]
      host [id 12
        nhi_route [dest default interface 0 next_hop 3(1)] 
        _extends .dictionary.client10Mb
      ]

      host [id 13 
        nhi_route [dest default interface 0 next_hop 5(1)] 
        _extends .dictionary.client10Mb
      ]
      host [id 14 
        nhi_route [dest default interface 0 next_hop 5(1)] 
        _extends .dictionary.client10Mb
      ]

      host [id 15
        nhi_route [dest default interface 0 next_hop 6(3)] 
        _extends .dictionary.client10Mb
      ]
      host [id 16
        nhi_route [dest default interface 0 next_hop 6(3)] 
        _extends .dictionary.client10Mb
      ] 

      host [id 17 
        nhi_route [dest default interface 0 next_hop 6(2)] 
        _extends .dictionary.client10Mb
      ]
      host [id 18
        nhi_route [dest default interface 0 next_hop 6(2)] 
        _extends .dictionary.client10Mb
      ]

      host [id 19
        nhi_route [dest default interface 0 next_hop 6(1)]  
        _extends .dictionary.client10Mb
      ]
      host [id 20
        nhi_route [dest default interface 0 next_hop 6(1)] 
        _extends .dictionary.client10Mb
      ]

      link [ attach 0(1) attach 1(2) delay 0.001 ]
      link [ attach 0(2) attach 2(0) delay 0.001 ]
      link [ attach 2(1) attach 3(3) delay 0.01 ]
      link [ attach 2(2) attach 4(0) delay 0.005 ]
      link [ attach 2(3) attach 7(0) attach 8(0) delay 0.003 ]
      link [ attach 4(1) attach 9(0) attach 10(0) delay 0.001 ]
      link [ attach 1(1) attach 3(0) delay 0.001 ]
      link [ attach 3(1) attach 11(0) attach 12(0) delay 0.001 ]
      link [ attach 3(2) attach 5(0) delay 0.001 ]
      link [ attach 5(1) attach 13(0) attach 14(0) delay 0.001 ]
      link [ attach 5(2) attach 6(0) delay 0.001 ]
      link [ attach 6(3) attach 15(0) attach 16(0) delay 0.001 ]
      link [ attach 6(2) attach 17(0) attach 18(0) delay 0.001 ]
      link [ attach 6(1) attach 19(0) attach 20(0) delay 0.001 ]

    ]
     
  ]  # end of network2

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

  network3 [
    Net [
      router [ id 0
        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
        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
        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
        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
      ]

      host [ id 4
        nhi_route [dest default interface 0 next_hop 0(3)] 
        _extends .dictionary.client10Mb
      ]
      host [ id 5
        nhi_route [dest default interface 0 next_hop 0(3)] 
        _extends .dictionary.client10Mb
      ]

      host [id 6 
        nhi_route [dest default interface 0 next_hop 0(2)] 
        _extends .dictionary.client10Mb
      ]
      host [id 7 
        nhi_route [dest default interface 0 next_hop 0(2)] 
        _extends .dictionary.client10Mb
      ]

      host [id 8 
        nhi_route [dest default interface 0 next_hop 2(2)] 
        _extends .dictionary.client10Mb
      ]
      host [id 9 
        nhi_route [dest default interface 0 next_hop 2(2)] 
        _extends .dictionary.client10Mb
      ]

      host [id 10
        nhi_route [dest default interface 0 next_hop 3(2)] 
        _extends .dictionary.client10Mb
      ]
      host [id 11
        nhi_route [dest default interface 0 next_hop 3(2)] 
        _extends .dictionary.client10Mb
      ]

      host [id 12
        nhi_route [dest default interface 0 next_hop 3(1) ] 
        _extends .dictionary.client10Mb
      ]
      host [id 13
        nhi_route [dest default interface 0 next_hop 3(1)] 
        _extends .dictionary.client10Mb
      ]

      link [ attach 0(3) attach 4(0) attach 5(0) delay 0.001 ]
      link [ attach 0(2) attach 6(0) attach 7(0) delay 0.001 ]
      link [ attach 0(1) attach 1(3) delay 0.01 ]
      link [ attach 1(2) attach 2(0) delay 0.003 ]
      link [ attach 2(1) attach 3(3) delay 0.003 ]
      link [ attach 1(1) attach 3(0) delay 0.003 ]
      link [ attach 2(2) attach 8(0) attach 9(0) delay 0.001 ]
      link [ attach 3(2) attach 10(0) attach 11(0) delay 0.001 ]
      link [ attach 3(1) attach 12(0) attach 13(0) delay 0.001 ]
    ]
    
  ]  # end of network3

]  # end of .networks

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

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 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
  ]

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

  # 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]
  ]]
  
] # end of .dictionary