// // $Copyright_v6PC$ // // $Copyright$ // // $Name: $ // // $TAHI: ct/spec/RH_AtHost.def,v 1.6 2004/04/02 03:47:51 kenta Exp $ // // // Network topology // (NET_GLOBAL0) TN (Link0) NUT // Host1 -----> Router1 -----> Router2 -----> Router3 -----> Host2 // H1R1 R1R2 R2R3 R3H2 // NET_GLOBAL6 NET_GLOBAL4 NET_GLOBAL2 NET_GLOBAL0 // #define TN_GL0_ADDR tn2v6(_GLOBAL0_UCAST_PRFX,_GLOBAL0_UCAST_PRFXLEN,"Link0") #define NUT_GL0_ADDR nut2v6(_GLOBAL0_UCAST_PRFX,_GLOBAL0_UCAST_PRFXLEN,"Link0") #define H1_H1R1_ADDR v6(_GLOBAL0A0N_UCAST_ADDR) #define R1_H1R1_ADDR v6(_GLOBAL6A1N_UCAST_ADDR) #define R1_R1R2_ADDR v6(_GLOBAL4A0N_UCAST_ADDR) #define R2_R1R2_ADDR v6(_GLOBAL4A1N_UCAST_ADDR) #define R2_R2R3_ADDR v6(_GLOBAL2A0N_UCAST_ADDR) #define R3_R2R3_ADDR v6(_GLOBAL2A1N_UCAST_ADDR) #define R3_R3H2_ADDR TN_GL0_ADDR #define H2_R3H2_ADDR NUT_GL0_ADDR #define RH_TO_LINK0 rh_R3_to_H2 // // Routing Header // Hdr_Routing rh_H1_to_R1 { NextHeader = 58; // ICMP SegmentsLeft = 3; Address = R2_R1R2_ADDR; Address = R3_R2R3_ADDR; Address = H2_R3H2_ADDR; } Hdr_Routing rh_R1_to_R2 { NextHeader = 58; // ICMP SegmentsLeft = 2; Address = R1_H1R1_ADDR; Address = R3_R2R3_ADDR; Address = H2_R3H2_ADDR; } Hdr_Routing rh_R2_to_R3 { NextHeader = 58; // ICMP SegmentsLeft = 1; Address = R1_H1R1_ADDR; Address = R2_R1R2_ADDR; Address = H2_R3H2_ADDR; } Hdr_Routing rh_R3_to_H2 { NextHeader = 58; // ICMP SegmentsLeft = 0; Address = R1_H1R1_ADDR; Address = R2_R1R2_ADDR; Address = R3_R2R3_ADDR; } Hdr_Routing rh_H2_to_R3 { NextHeader = 58; // ICMP SegmentsLeft = 3; Address = R2_R2R3_ADDR; Address = R1_R1R2_ADDR; Address = H1_H1R1_ADDR; } Hdr_Routing rh_R3_to_R2 { NextHeader = 58; // ICMP SegmentsLeft = 2; Address = R3_R3H2_ADDR; Address = R1_R1R2_ADDR; Address = H1_H1R1_ADDR; } Hdr_Routing rh_R2_to_R1 { NextHeader = 58; // ICMP SegmentsLeft = 1; Address = R3_R3H2_ADDR; Address = R2_R2R3_ADDR; Address = H1_H1R1_ADDR; } Hdr_Routing rh_R1_to_H1 { NextHeader = 58; // ICMP SegmentsLeft = 0; Address = R3_R3H2_ADDR; Address = R2_R2R3_ADDR; Address = R1_R1R2_ADDR; } //====================================================================== // // Payload Data // Payload echo_data8 { data = {1,2,3,4,5,6,7,8}; } //====================================================================== // // Echo Request with RH // FEM_icmp6_echo_request_exth( echo_request_rh, _HETHER_tn2nut, { _SRC(H1_H1R1_ADDR); _DST(H2_R3H2_ADDR); }, { header = _HDR_IPV6_NAME(echo_request_rh); exthdr = RH_TO_LINK0; upper = _ICMPV6_NAME(echo_request_rh); }, { payload = echo_data8; } ) //====================================================================== // // Echo Reply // _HETHER_define(hether_nut2h1, nutether(), ether(A0N_MAC_ADDR) ) FEM_icmp6_echo_reply( echo_reply, hether_nut2h1, { _SRC(H2_R3H2_ADDR); _DST(H1_H1R1_ADDR); }, { payload = echo_data8; } ) //====================================================================== // // RA // Opt_ICMPv6_Prefix prefixopt_test { PrefixLength = 64; LFlag = 1; AFlag = 1; ValidLifetime = 10000; PreferredLifetime = 10000; Prefix = v6(_GLOBAL0_UCAST_PRFX); } FEM_icmp6_ra( usolra, _HETHER_src2allnodes, { _SRC(v6src()); _DST(v6(_ALLNODES_MCAST_ADDR)); HopLimit = 255; }, { CurHopLimit = 64; LifeTime = 1805; ReachableTime = 30005; RetransTimer = 1005; option = _SLLOPT_src; option = prefixopt_test; } ) //====================================================================== // // NS // _HETHER_define(hether_nut2tentsolnode, nutether(), _ETHER_SOLNODE_MCAST(NUT_GL0_ADDR) ) FEM_icmp6_ns ( dadns, hether_nut2tentsolnode, { _SRC(v6(_UNSPEC_ADDR)); _DST(_IPV6_SOLNODE_MCAST(NUT_GL0_ADDR)); HopLimit = 255; }, { TargetAddress = NUT_GL0_ADDR; } ) //====================================================================== // // Neighbor Solicitation // _HETHER_define(hether_nut2h1solnode, nutether(), _ETHER_SOLNODE_MCAST(H1_H1R1_ADDR) ) FEM_icmp6_ns( ns, hether_nut2h1solnode, { _SRC(oneof(nutv6(),nut2v6(_GLOBAL0_UCAST_PRFX,_GLOBAL0_UCAST_PRFXLEN,"Link0"))); _DST(_IPV6_SOLNODE_MCAST(H1_H1R1_ADDR)); HopLimit = 255; }, { TargetAddress = H1_H1R1_ADDR; option = _SLLOPT_nut; } ) // // Neighbor Advertisement // _HETHER_define(hether_h12nut, ether(A0N_MAC_ADDR), nutether() ) _TLLOPT_define(_TLLOPT_h1, ether(A0N_MAC_ADDR)) FEM_icmp6_na( na, hether_h12nut, { _SRC(H1_H1R1_ADDR); _DST(nutv6()); HopLimit = 255; }, { SFlag = 1; OFlag = 1; TargetAddress = H1_H1R1_ADDR; option = _TLLOPT_h1; } ) //======================================================================