# $XORP$

XORP/Win32 Release Process
--------------------------

1. Check out a fresh XORP tree, with the BGP test data.
	# xcvs co xorp data
   This may take around 5 minutes dependent on latency and congestion.

2. Ensure configure step completes OK.
	# cd xorp && ./configure
   This takes around 3 minutes.

3. Perform the build. If OK proceed to next step.
   Most likely problems: You don't have MinGW installed correctly
   and/or patched for building XORP.
	# gmake
   This may take 45 minutes or more.

4. Perform regression tests. If OK proceed to next step.
   Most likely problems: bash not present in hardcoded path in
   RunShellCommand class (C:\MSYS\bin\sh.exe).
	# gmake check
   This may take 2 hours or more.

5.  Perform basic application tests on local host.
    Bring up a basic router. Steps:
	1. Open three cmd.exe windows.
	2. set XORP_ROOT=c:\path\to\xorp\build\directory
	3. cd into XORP_ROOT
	4. Run rtrmgr\xorp_rtrmgr.exe in one window.
	5. Run rtrmgr\xorpsh.exe in another.
        6. Keep the other cmd.exe window handy for running Windows
           administration commands.

* ENSURE THAT THE ROUTING AND REMOTE ACCESS SERVICE IS NOT RUNNING BEFORE
  STARTING ANY TEST SCENARIO.
  U:\XORP> net stop remoteaccess
  The Routing and Remote Access service is not started.
  More help is available by typing NET HELPMSG 3521.

    Scenario 1: Test basic XORP behaviour on Windows.

* Create a C:\config.boot file with an interface configuration matching
the interfaces present in the 'Network Connections' folder.

* Add two static route entries; one candidate default, and one /32 prefix
to a remote host with the next-hop as a host (not router) on your network.

* Start the router manager.
C:\Documents and Settings\Administrator>cd u:\xorp
C:\Documents and Settings\Administrator>u:
U:\xorp>set XORP_ROOT=U:\XORP
U:\xorp>rtrmgr\xorp_rtrmgr -b c:\config.boot

* Verify that fea, policy, rib, static_routes modules start up.

If RRAS is disabled you should see these messages:

[ 2006/07/15 15:03:14 WARNING U:\XORP\fea\xorp_fea.exe FEA ] RRAS is not running
; disabling FtiConfigEntrySetRtmV2.
[ 2006/07/15 15:03:14 WARNING U:\XORP\fea\xorp_fea.exe FEA ] RRAS is not running
; disabling FtiConfigTableObserverRtmV2.

* Verify that xorpsh can connect to the running router manager locally.

U:\xorp>set XORP_ROOT=U:\XORP
U:\xorp>rtrmgr\xorpsh
[ 2006/07/15 15:10:35 WARNING rtrmgr\xorpsh RTRMGR ] [Operational Command File:
U:\XORP/etc/templates/misc.cmds line 19]: Executable file not found: ping6
[ 2006/07/15 15:10:35 WARNING rtrmgr\xorpsh RTRMGR ] [Operational Command File:
U:\XORP/etc/templates/misc.cmds line 29]: Executable file not found: traceroute
[ 2006/07/15 15:10:35 WARNING rtrmgr\xorpsh RTRMGR ] [Operational Command File:
U:\XORP/etc/templates/misc.cmds line 39]: Executable file not found: traceroute6

Welcome to XORP on empiric
@empiric>

* Verify that XORP's idea of the network interfaces configured on the
  system matches that in the Windows networking stack.

@empiric> show interfaces
bge0/bge0: Flags:<ENABLED,BROADCAST,MULTICAST> mtu 1500
        inet 192.168.123.199 subnet 192.168.123.0/24 broadcast 192.168.123.255
        physical index 2
        ether 0:10:c6:dd:6:f3

And in the administration shell:

U:\XORP> ipconfig

Windows IP Configuration


Ethernet adapter bge0:

   Connection-specific DNS Suffix  . : lon.incunabulum.net
   IP Address. . . . . . . . . . . . : 192.168.123.199
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   IP Address. . . . . . . . . . . . : 2001:618:400:1041:210:c6ff:fedd:6f3
   IP Address. . . . . . . . . . . . : fe80::210:c6ff:fedd:6f3%6
   Default Gateway . . . . . . . . . : 192.168.123.1
                                       fe80::206:2bff:fe03:5c31%6

Ethernet adapter {53741D39-FF7A-4083-A5B4-9D1634535E56}:

   Media State . . . . . . . . . . . : Media disconnected

XXX

    Scenario 2: Introduce static routes to local FIB via XORP.

* Verify that the static routes appear in the Windows FIB.

U:\XORP> route print

IPv4 Route Table
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 10 c6 dd 06 f3 ...... Broadcom NetXtreme Gigabit Ethernet - Packet Sch
eduler Miniport
0x4 ...00 ff 53 74 1d 39 ...... TAP-Win32 Adapter V8 - Packet Scheduler Miniport

===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    192.168.123.1  192.168.123.199     20
          1.2.3.4  255.255.255.255    192.168.123.6  192.168.123.199     20
...

 * When finished, CTRL-C in the CMD.EXE window containing xorp_rtrmgr.exe.
   This should terminate XORP and all sub-processes cleanly. If not performed
   from within a CMD.EXE window then inheritance of signal handlers won't
   happen correctly.
  * Use 'Process Explorer' from Sysinternals.com to kill the entire
    xorp_rtrmgr.exe process tree, to ensure XORP is fully terminated
    before running another test scenario.

6.  Perform typical peer scenario tests.

Scenario 1: Local RIP.
 Unusual behaviour to look for: Traffic not being sent or received.
 Routes not being plumbed into IP helper.

 * Before starting, ensure that the second interface is up and configured
   in Network Connections.

 * Start rtrmgr with RIP configured on two interfaces in config.boot.
 
 * Use xorpsh to check both interfaces are present and correctly addressed.
 xorpsh> show interfaces

 * Check routes are in FINAL table.
 xorpsh> show route table ipv4 unicast final

 * Check RIP is running.
@empiric> show rip status all

* RIP on bge0 bge0 192.168.123.199
  Status: enabled

* RIP on iwi0 iwi0 192.168.124.190
  Status: enabled

 * Run ethereal and dump on both interfaces; check that you see RIP
   and IGMP membership traffic for 224.0.0.9.
   Restart XORP if necessary to capture the IGMP joins.

 * On a peer connected to the same network, tcpdump for RIP traffic:
montagne:~ % s tcpdump -i em0 -n -vvvv -e udp port router
11:20:39.375098 00:10:c6:dd:06:f3 > 01:00:5e:00:00:09, ethertype IPv4 (0x0800), length 66: (tos 0x0, ttl   1, id 50313, offset 0, flags [none], proto: UDP (17), length: 52) 192.168.123.199.520 > 224.0.0.9.520: [udp sum ok]
        RIPv2, Request, length: 24
        0x0000:  0102 0000 0000 0000 0000 0000 0000 0000
        0x0010:  0000 0000 0000 0010

 * Now configure RIP to redistribute static routes, and perform the above
   packet inspections again.

 * Check that static host route 1.2.3.4/32 is sent OK on secondary interface.

Scenario 2: Local OSPF.
 Unusual behaviour to look for: Traffic not being sent or received when
 using raw socket IPv4 multicast.

 * Redistribute static routes into ospf.

 * Start XORP.

 * Check ospf is running on both primary and secondary interface.

 * Check IPv4 IGMP join to OSPF group on secondary interface.
   Locally; use Ethereal, look for IGMP on 224.0.0.6.

 * Check IGMP join and OSPF traffic seen by peer on primary subnetwork.
   On peer; use tcpdump or Ethereal, look for IGMP on 224.0.0.6 and proto ospf.

 * Start OSPF peer on primary subnetwork.

 * Leave protocol analyzers running and check for successful exchange
   of initial LSAs.

 * Verify peers see each other:
   xorp> show ospf4 neighbor

 * Verify LSAs are as you'd expect.

@empiric> show ospf4 database
   OSPF link state database, Area 0.0.0.0
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len
Router  *192.168.123.199  192.168.123.199  0x80000001   108  0x2  0x3c6b  48
ASExt-2 *0.0.0.0          192.168.123.199  0x80000001   739  0x2  0x55e9  36
ASExt-2 *1.2.3.4          192.168.123.199  0x80000001   739  0x2  0x2d03  36
Network *192.168.123.199  192.168.123.199  0x80000001   108  0x2  0x1950  32
Router   192.168.123.6    192.168.123.6    0x80000002   104  0x2  0x786c  36

----

Scenario 3: Local BGP.
 Unusual behaviour to look for: Hold timer timing out, timer problems.

 * Configure both peers as before to enable BGP and redistribute static
   routes into BGP.

 * Bring up the peering on both sides by starting XORP.

 * Watch for the hold timer.

@empiric> show bgp peers  detail
Peer 1: local 192.168.123.199/179 remote 192.168.123.6/179
  Peer ID: 192.168.123.6
  Peer State: ESTABLISHED
  Admin State: START
  Negotiated BGP Version: 4
  Peer AS Number: 65024
  Updates Received: 1,  Updates Sent: 2
  Messages Received: 3,  Messages Sent: 4
  Time since last received update: 12 seconds
  Number of transitions to ESTABLISHED: 1
  Time since last entering ESTABLISHED state: 16 seconds
  Retry Interval: 120 seconds
  Hold Time: 90 seconds,  Keep Alive Time: 30 seconds
  Configured Hold Time: 90 seconds,  Configured Keep Alive Time: 30 seconds
  Minimum AS Origination Interval: 0 seconds
  Minimum Route Advertisement Interval: 0 seconds

  * Keep your eye on the keepalive timer.

 * Verify that the Windows peer learned a route from the test partner.

@empiric> show route table ipv4 unicast ebgp detail
Network 10.0.0.0/8
    Nexthop        := 192.168.123.1
    Interface      := bge0
    Vif            := bge0
    Metric         := 0
    Protocol       := ebgp
    Admin distance := 20

Once satisfied that everything is in order proceed to the next stage.

7. Cut the release.
 Use the Nullsoft Installer script in xorp/contrib/win32/installer.
 See README in this directory for more detailed instructions.
 You may need to edit the SRCDIR variable in the xorp.nsi file to point
 to where you've built XORP, as well as the DLLDIR variable if you've
 installed MSYS and MinGW separately or elsewhere.

 * makensis xorp.nsi
 This will take around 3 minutes depending on how busy your disk is --
 everything gets compressed into one big SETUP.EXE.
 Note that the installer does *not* strip symbols from the binaries.

 * Test the installer by running it.
 * Test the uninstaller from Windows' 'Add/Remove Programs' Control Panel
   applet.
