/*	       lact.c   2.03.000 20JUN99 13:00 */

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "sys.h"
#include "lac_options.h"
#include "lac_types.h"
#include "lac_defaults.h"
#include "lac.h"
#include "lact_lan.h"
/******************************************************************************
 * LACT : LINK AGGREGATION CONTROL PROTOCOL TESTER
 ******************************************************************************
 */
/*---------------------------------------------------------------------------*/
static void test_init()
{
   sys_init(); printf("*********************************************");
   printf("********************************************************\n");
}
/*---------------------------------------------------------------------------*/
static void test1a()
{
   Lac_system *s1; Lac_port *s1p1; Lan *lan1;

   printf("* TEST 1A: System 707, Port 3 connected\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   printf("* Default parameters\n\n");

   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test1b()
{
   Lac_system *s1; Lac_port *s1p1; Lan *lan1;

   printf("* TEST 1B: System 707, Port 1 connected\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lact_add_port(s1, (Port_no)1, &s1p1, lan1);
   printf("* Default parameters except:\n");
   
   s1p1->partner_admin.state.aggregation = True;
   lac_init_port(s1, 1, Lacp_enabled);
   printf("* Partner Admin : Aggregate \n");

   printf("\n");
   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test1c()
{
   Lac_system *s1; Lac_port *s1p1; Lan *lan1;

   printf("* TEST 1C: System 707, Port 1 connected\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lact_add_port(s1, (Port_no)1, &s1p1, lan1);
   printf("* Default parameters except:\n");
   
   s1p1->actor_admin.state.lacp_activity = False;
   lac_init_port(s1, 1, Lacp_enabled);
   printf("* Actor Admin : Passive \n");

   printf("\n");
   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test1d()
{
   Lac_system *s1; Lac_port *s1p1; Lan *lan1;

   printf("* TEST 1D: System 707, Port 1 connected\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lact_add_port(s1, (Port_no)1, &s1p1, lan1);
   lac_init_port(s1, 1, Lacp_disabled);
   printf("* LACP Disabled \n");
   printf("\n");

   printf("\n");
   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test2a()
{
   Lac_system *s1; Lac_port *s1p1; Lan *lan1;
   Node tester1;   Node *t1 = &tester1;

   printf("* TEST 2A: System 707, Port 1 connected to tester 808\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lact_add_port(s1, (Port_no)1, &s1p1, lan1);
   lact_init_tester(t1); sys_attach_lan_node(lan1, t1);

   printf("* Default parameters except:\n");
   printf("\n");

   lact_txpdu(&tester1,
      /** actor's parameters and state **/
      1 /* port_priority   */,     5 /* port_no   */,
      1 /* system_priority */,   808 /* system_id */,
      5 /* key       */,
      1 /* activity  */, 1 /* short_timeout */, 1 /* aggregate    */,
      1 /* in_sync   */, 1 /* collecting    */, 1 /* distributing */,

      /** partner's parameters and state **/
      1 /* port_priority   */,     6 /* port_no   */,
      1 /* system_priority */,   707 /* system_id */,
      5 /* key       */,
      1 /* activity  */, 1 /* short_timeout */, 1 /* aggregate    */,
      1 /* in_sync   */, 1 /* collecting    */, 1 /* distributing */);

   lact_run_for(15 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test2b()
{
   Lac_system *s1; Lac_port *s1p1; Lan *lan1;
   Node tester1;   Node *t1 = &tester1;

   printf("* TEST 2B: System 707, Port 1 connected to tester 808\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lact_add_port(s1, (Port_no)1, &s1p1, lan1);
   lact_init_tester(t1); sys_attach_lan_node(lan1, t1);

   printf("* Default parameters except:\n");
   printf("\n");

   lact_txpdu(&tester1,
      /** actor's parameters and state **/
      1 /* port_priority   */,     5 /* port_no   */,
      1 /* system_priority */,   808 /* system_id */,
      5 /* key       */,
      1 /* activity  */, 0 /* long_timeout  */, 1 /* aggregate    */,
      1 /* in_sync   */, 1 /* collecting    */, 1 /* distributing */,

      /** partner's parameters and state **/
      1 /* port_priority   */,     6 /* port_no   */,
      1 /* system_priority */,   707 /* system_id */,
      5 /* key       */,
      1 /* activity  */, 1 /* short_timeout */, 1 /* aggregate    */,
      1 /* in_sync   */, 1 /* collecting    */, 1 /* distributing */);

   lact_run_for(15 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test2c()
{
   Lac_system *s1; Lac_port *s1p1; Lan *lan1;
   Node tester1;   Node *t1 = &tester1;

   printf("* TEST 2C: System 707, Port 1 connected to tester 808\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lact_add_port(s1, (Port_no)1, &s1p1, lan1);
   lact_init_tester(t1); sys_attach_lan_node(lan1, t1);

   printf("* Default parameters except:\n");
   printf("\n");

   lact_txpdu(&tester1,
      /** actor's parameters and state **/
      1 /* port_priority   */,     5 /* port_no   */,
      1 /* system_priority */,   808 /* system_id */,
      5 /* key       */,
      1 /* activity  */, 0 /* long_timeout  */, 0 /* individual   */,
      1 /* in_sync   */, 1 /* collecting    */, 1 /* distributing */,

      /** partner's parameters and state **/
      1 /* port_priority   */,     6 /* port_no   */,
      1 /* system_priority */,   707 /* system_id */,
      5 /* key       */,
      1 /* activity  */, 1 /* short_timeout */, 1 /* aggregate    */,
      1 /* in_sync   */, 1 /* collecting    */, 1 /* distributing */);

   lact_run_for(15 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test3a()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s2p1; Lan *lan1;

   printf("* TEST 3A: System 707, Port 3 connected to System 202, Port 4\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   printf("* Default parameters\n\n");

   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test3b()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s2p1; Lan *lan1;

   printf("* TEST 3B: System 707, Port 3 connected to System 202, Port 4\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   printf("* Default parameters except: \n");

   s1p1->actor_admin.state.aggregation = False;
   lac_init_port(s1, 3, Lacp_enabled);
   printf("* 707.3 Actor Admin : Individual \n");

   printf("\n");
   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test3c()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s2p1; Lan *lan1;

   printf("* TEST 3C: System 707, Port 3 connected to System 202, Port 4\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   printf("* Default parameters except: \n");

   s1p1->actor_admin.state.lacp_activity = False;
   lac_init_port(s1, 3, Lacp_enabled);
   printf("* 707.3 Actor Admin : Passive \n");

   s2p1->actor_admin.state.lacp_activity = False;
   lac_init_port(s2, 4, Lacp_enabled);
   printf("* 202.4 Actor Admin : Passive \n");

   printf("\n");
   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test3d()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s2p1; Lan *lan1;

   printf("* TEST 3D: System 707, Port 3 connected to System 202, Port 4\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   printf("* Default parameters except: \n");

   s1p1->actor_admin.state.lacp_activity = False;
   lac_init_port(s1, 3, Lacp_enabled);
   printf("* 707.3 Actor Admin : Passive \n");

   printf("\n");
   lact_run_for(10 * Lac_ticks + 5);

   s2p1->actor.state.lacp_activity       = False;
   s2p1->actor_admin.state.lacp_activity = False;
   printf("* 202.4 : Passive \n\n");
   s2p1->actor_admin.state.lacp_activity = False;

   printf("\n");
   lact_run_for(25 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test3e()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s2p1; Lan *lan1;

   printf("* TEST 3E: System 707, Port 3 connected to System 202, Port 4\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   printf("* 707.3 completes initialization \n\n");
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);

   lact_run_for(5);
   printf("* 202.4 completes initialization \n\n");
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
 
   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test3f()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s2p1; Lan *lan1;

   printf("* TEST 3F: System 707, Port 3 connected to System 202, Port 4\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   printf("* Default parameters\n\n");

   lact_run_for(10 * Lac_ticks + 5);
   printf("* 202 reinitialized \n\n");
   lac_init_system(s2);


   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test4a()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s1p2, *s2p1, *s2p2;
   Lan *lan1, *lan2;

   printf("* TEST 4A: System 707, Port 3 connected to System 202, Port 4\n");
   printf("*          System 707, Port 5 connected to System 202, Port 6\n");
   (void)sys_create_lan(&lan1);
   (void)sys_create_lan(&lan2);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s1, (Port_no)5, &s1p2, lan2);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   (void)lact_add_port(s2, (Port_no)6, &s2p2, lan2);
 
   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test4b()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s1p2, *s2p1, *s2p2;
   Lan *lan1, *lan2;

   printf("* TEST 4B: System 707, Port 3 connected to System 202, Port 4\n");
   printf("*          System 707, Port 5 connected to System 202, Port 6\n");
   (void)sys_create_lan(&lan1);
   (void)sys_create_lan(&lan2);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s1, (Port_no)5, &s1p2, lan2);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   (void)lact_add_port(s2, (Port_no)6, &s2p2, lan2);
   
   s1p1->actor_admin.state.aggregation = False;
   lac_init_port(s1, 3, Lacp_enabled);
   printf("* 707.3 Actor Admin : Individual \n");

   printf("\n");
   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test4c()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s1p2, *s2p1, *s2p2;
   Lan *lan1, *lan2;

   printf("* TEST 4C: System 707, Port 3 connected to System 202, Port 4\n\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
 
   lact_run_for(5 * Lac_ticks + 2);

   printf("*          System 707, Port 5 connected to System 202, Port 6\n\n");
   (void)sys_create_lan(&lan2);
   (void)lact_add_port(s1, (Port_no)5, &s1p2, lan2);
   (void)lact_add_port(s2, (Port_no)6, &s2p2, lan2);

   lact_run_for(5 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test4d()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s1p2, *s2p1, *s2p2;
   Lan *lan1, *lan2;

   printf("* TEST 4D: System 707, Port 3 connected to System 202, Port 6\n\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s2, (Port_no)6, &s2p1, lan1);
 
   lact_run_for(5 * Lac_ticks + 2);

   printf("*          System 707, Port 5 connected to System 202, Port 4\n\n");
   (void)sys_create_lan(&lan2);
   (void)lact_add_port(s1, (Port_no)5, &s1p2, lan2);
   (void)lact_add_port(s2, (Port_no)4, &s2p2, lan2);

   lact_run_for(5 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test5a()
{
   Lac_system *s1; Lac_port *s1p1, *s1p2; Lan *lan1;

   printf("* TEST 5A: System 707, Port 3 connected to System 707, Port 4\n");
   (void)sys_create_lan(&lan1);
   (void)lac_create_system(707, &s1);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s1, (Port_no)4, &s1p2, lan1);
   printf("* Default parameters\n\n");

   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test5b()
{
   Lac_system *s1; Lac_port *s1p1, *s1p2, *s1p3, *s1p4; Lan *lan1, *lan2;

   printf("* TEST 5B: System 707, Port 3 connected to System 707, Port 4\n");
   printf("*          System 707, Port 5 connected to System 202, Port 6\n");
   (void)sys_create_lan(&lan1);
   (void)sys_create_lan(&lan2);
   (void)lac_create_system(707, &s1);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s1, (Port_no)4, &s1p2, lan1);
   (void)lact_add_port(s1, (Port_no)5, &s1p3, lan2);
   (void)lact_add_port(s1, (Port_no)6, &s1p4, lan2);
   printf("* Default parameters except:\n");

   s1p2->actor_admin.key = 2;
   lac_init_port(s1, 4, Lacp_enabled);
   printf("* 707.4 Actor Admin : Key=2 \n");
   s1p4->actor_admin.key = 2;
   lac_init_port(s1, 6, Lacp_enabled);
   printf("* 707.6 Actor Admin : Key=2 \n");

   printf("\n");
   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test5c()
{
   Lac_system *s1; Lac_port *s1p1, *s1p2, *s1p3, *s1p4; Lan *lan1, *lan2;

   printf("* TEST 5C: System 707, Port 3 connected to System 707, Port 4\n");
   printf("*          System 707, Port 5 connected to System 202, Port 6\n");
   (void)sys_create_lan(&lan1);
   (void)sys_create_lan(&lan2);
   (void)lac_create_system(707, &s1);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s1, (Port_no)4, &s1p2, lan1);
   (void)lact_add_port(s1, (Port_no)5, &s1p3, lan2);
   (void)lact_add_port(s1, (Port_no)6, &s1p4, lan2);
   printf("* Default parameters\n\n");

   printf("\n");
   lact_run_for(10 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test6a()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s1p2, *s2p1, *s2p2;
   Lan *lan1, *lan2;

   printf("* TEST 6A: System 707, Port 3 connected to System 202, Port 4\n");
   printf("*          System 707, Port 5 connected to System 202, Port 6\n");
   (void)sys_create_lan(&lan1);
   (void)sys_create_lan(&lan2);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s1, (Port_no)5, &s1p2, lan2);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   (void)lact_add_port(s2, (Port_no)6, &s2p2, lan2);
 
   printf("\n");
   lact_run_for(6 * Lac_ticks + 5);

   lact_lan_detach(s2p2);
   printf("* 202.6 quietly disconnected \n\n");

   printf("\n");
   lact_run_for(12 * Lac_ticks);

   lact_lan_attach(lan2, s2p2);
   printf("* 202.6 quietly reconnected \n\n");

   printf("\n");
   lact_run_for(6 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test6b()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s1p2, *s2p1, *s2p2;
   Lan *lan1, *lan2;

   printf("* TEST 6B: System 707, Port 3 connected to System 202, Port 4\n");
   printf("*          System 707, Port 5 connected to System 202, Port 6\n");
   (void)sys_create_lan(&lan1);
   (void)sys_create_lan(&lan2);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s1, (Port_no)5, &s1p2, lan2);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   (void)lact_add_port(s2, (Port_no)6, &s2p2, lan2);
 
   printf("\n");
   lact_run_for(6 * Lac_ticks + 5);

   lact_lan_detach(s2p1);
   printf("* 202.4 quietly disconnected \n\n");

   printf("\n");
   lact_run_for(12 * Lac_ticks);

   lact_lan_attach(lan1, s2p1);
   printf("* 202.4 quietly reconnected \n\n");

   printf("\n");
   lact_run_for(6 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test6c()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s1p2, *s2p1, *s2p2;
   Lan *lan1, *lan2;

   printf("* TEST 6C: System 707, Port 3 connected to System 202, Port 4\n");
   printf("*          System 707, Port 5 connected to System 202, Port 6\n");
   (void)sys_create_lan(&lan1);
   (void)sys_create_lan(&lan2);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s1, (Port_no)5, &s1p2, lan2);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   (void)lact_add_port(s2, (Port_no)6, &s2p2, lan2);
 
   printf("\n");
   lact_run_for(6 * Lac_ticks + 5);

   printf("* 707.5 and 202.6 disconnected and disabled\n\n");
   lact_lan_detach(s1p2); lac_disable_port(s1, (Port_no)5);
   lact_lan_detach(s2p2); lac_disable_port(s2, (Port_no)6);

   printf("\n");
   lact_run_for(12 * Lac_ticks);

   printf("* 707.5 and 202.6 reconnected and enabled\n\n");
   lact_lan_attach(lan2, s1p2); lac_enable_port(s1, (Port_no)5);
   lact_lan_attach(lan2, s2p2); lac_enable_port(s2, (Port_no)6);

   printf("\n");
   lact_run_for(6 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test6d()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s1p2, *s2p1, *s2p2;
   Lan *lan1, *lan2;

   printf("* TEST 6D: System 707, Port 3 connected to System 202, Port 4\n");
   printf("*          System 707, Port 5 connected to System 202, Port 6\n");
   (void)sys_create_lan(&lan1);
   (void)sys_create_lan(&lan2);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s1, (Port_no)5, &s1p2, lan2);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
   (void)lact_add_port(s2, (Port_no)6, &s2p2, lan2);
 
   printf("\n");
   lact_run_for(6 * Lac_ticks + 5);

   printf("* 707.3 and 202.4 disconnected and disabled\n\n");
   lact_lan_detach(s1p1); lac_disable_port(s1, (Port_no)3);
   lact_lan_detach(s2p1); lac_disable_port(s2, (Port_no)4);

   printf("\n");
   lact_run_for(12 * Lac_ticks);

   printf("* 707.5 and 202.6 reconnected and enabled\n\n");
   lact_lan_attach(lan1, s1p1); lac_enable_port(s1, (Port_no)3);
   lact_lan_attach(lan1, s2p1); lac_enable_port(s2, (Port_no)4);

   printf("\n");
   lact_run_for(6 * Lac_ticks);
}
/*---------------------------------------------------------------------------*/
static void test7a()
{
   Lac_system *s1, *s2; Lac_port *s1p1, *s1p2, *s2p1, *s2p2;
   Lan *lan1, *lan2;

   printf("* TEST 7A: System 707, Port 3 connected to System 202, Port 4\n");
   (void)sys_create_lan(&lan1);
   (void)sys_create_lan(&lan2);
   (void)lac_create_system(707, &s1);
   (void)lac_create_system(202, &s2);
   (void)lact_add_port(s1, (Port_no)3, &s1p1, lan1);
   (void)lact_add_port(s2, (Port_no)4, &s2p1, lan1);
 
   printf("\n");
   lact_run_for(6 * Lac_ticks + 5);

   printf("* 707.3 and 202.4 disconnected and disabled\n\n");
   lact_lan_detach(s1p1); lac_disable_port(s1, (Port_no)3);
   lact_lan_detach(s2p1); lac_disable_port(s2, (Port_no)4);

   printf("\n");
   lact_run_for(12 * Lac_ticks +3);
 
   printf("*          System 707, Port 5 connected to System 202, Port 6\n");
   (void)lact_add_port(s1, (Port_no)5, &s1p2, lan2);
   (void)lact_add_port(s2, (Port_no)6, &s2p2, lan2);

   printf("\n");
   lact_run_for(6 * Lac_ticks);

   printf("* 707.5 and 202.6 reconnected and enabled\n\n");
   lact_lan_attach(lan1, s1p1); lac_enable_port(s1, (Port_no)3);
   lact_lan_attach(lan1, s2p1); lac_enable_port(s2, (Port_no)4);

   printf("\n");
   lact_run_for(6 * Lac_ticks);
}

/******************************************************************************
 * LACT : LAC TESTER : MAIN
 ******************************************************************************
 */
int main()
{
   unsigned char c;
# if 1
   FILE *fp;
   char output_file[]="lactest008.txt";

   printf("Simulation results output to file %s \n", output_file);
 
   if (!(fp=freopen(output_file, "w", stdout)))
      {printf("Cannot open\n"); exit(1);
      }
   
   printf("Simulation results %s \n", output_file);
# endif

   test_init(); test1a(); 
   test_init(); test1b();
   test_init(); test1c();
   test_init(); test1d();
   test_init(); test2a();
   test_init(); test2b();
   test_init(); test2c();
   test_init(); test3a();
   test_init(); test3b();
   test_init(); test3c();
   test_init(); test3d();
   test_init(); test3e();
   test_init(); test3f();
   test_init(); test4a();
   test_init(); test4b();
   test_init(); test4c();
   test_init(); test4d();
   test_init(); test5a();
   test_init(); test5b();
   test_init(); test5c();
   test_init(); test6a();
   test_init(); test6b();
   test_init(); test6c();
   test_init(); test6d();
   test_init(); test7a();

   printf("test over\n");
   scanf("%c", &c);
   return 1;
}
