| Title | Processing invalid SPI field * |
| CommandLine | ./SGW/SG_I_A_RFC2408_5_5_2_2_P.seq -pkt ./SGW/SG_I_A_RFC2408_5_5_2_2_P.def test_type=BASIC -log 50.html -ti Processing invalid SPI field * |
| TestVersion | undefined |
| ToolVersion | REL_3_0_8 |
| Start | 2006/03/16 14:08:58 |
| Tn | /usr/local/v6eval//etc//tn.def |
| Nu | /usr/local/v6eval//etc//nut.def |
| Pkt | ./SGW/SG_I_A_RFC2408_5_5_2_2_P.def |
| System | freebsd-i386 |
| TargetName | FreeBSD 5.4-RELEASE |
| HostName | target1.tahi.org |
| Type | router |
| 14:08:58 | Start |
|
*** Target IKE initialization phase *** Target: Reset IKE SA entries: saddump |
|
| 14:08:59 |
vRemote(ikeResetSA.rmt) ``/usr/local/v6eval//bin/freebsd-i386//ikeResetSA.rmt -t freebsd-i386 -u root -p v6eval -d cuad0 -o 1 saddump ''
Connected target1# target1# /usr/sbin/setkey -c <<EOD dump; flush; EO? dump; ? flush; D ? EOD The result of line 1: No SAD entries. target1# target1# sendMessagesSync: never got /usr/sbin/setkey -c <<EODdump;flush;EOD echo $status 0 target1# kill -TERM `head -1 /var/run/racoon.pid` head: /var/run/racoon.pid: No such file or directory target1# target1# echo $status target1# echo $status 1 /bin/rm -f /var/run/racoon.pid target1# /bin/rm -f /var/run/racoon.pid target1# target1# echo $status 0 ~ [EOT] |
| Target: Clear SPD entries: spddump | |
| 14:09:06 |
vRemote(ipsecResetSPD.rmt) ``/usr/local/v6eval//bin/freebsd-i386//ipsecResetSPD.rmt -t freebsd-i386 -u root -p v6eval -d cuad0 -o 1 spddump ''
Connected target1# target1# /usr/sbin/setkey -c <<EOD spddump; spdflus? spddump; h; EOD ? spdflush; EOD ? EOD The result of line 1: No SPD entries. target1# target1# sendMessagesSync: never got /usr/sbin/setkey -c <<EODspddump;spdflush;EOD echo $status 0 ~ [EOT] |
| Target: Set SPD entries: src=3ffe:501:ffff:100::/64 dst=3ffe:501:ffff:104::/64 tsrc=3ffe:501:ffff:102::1 tdst=3ffe:501:ffff:103::11 upperspec=any direction=out protocol=PROTO_IPSEC_ESP mode=Tunnel | |
| 14:09:12 |
vRemote(ipsecSetSPD.rmt) ``/usr/local/v6eval//bin/freebsd-i386//ipsecSetSPD.rmt -t freebsd-i386 -u root -p v6eval -d cuad0 -o 1 src=3ffe:501:ffff:100::/64 dst=3ffe:501:ffff:104::/64 tsrc=3ffe:501:ffff:102::1 tdst=3ffe:501:ffff:103::11 upperspec=any direction=out protocol=PROTO_IPSEC_ESP mode=Tunnel ''
Connected
target1#
target1# /usr/sbin/setkey -c <<EOD
spdadd 3ffe:501:ffff:100::/64 3ffe:501:ffff:104::/64
any
-P out ipsec
esp/tunnel/3ffe:501:ffff:102::1-3ffe:501:ffff:103::11/require
;
spddump;
EOD
? spdadd 3ffe:501:ffff:100::/64 3ffe:501:ffff:104::/64
any
-P out ipsec
esp/tunnel/3ffe:501:ffff:102::1-3ffe:501:ffff:103::11/require
;
spddump;
EOD
? any
? -P out ipsec
? esp/tunnel/3ffe:501:ffff:102::1-3ffe:501:ffff:103::11/require
? ;
? spddump;
? EOD
3ffe:501:ffff:100::/64[any] 3ffe:501:ffff:104::/64[any] any
out ipsec
esp/tunnel/3ffe:501:ffff:102::1-3ffe:501:ffff:103::11/require
created: Mar 16 14:16:22 2006 lastused: Mar 16 14:16:22 2006
lifetime: 0(s) validtime: 0(s)
spid=17015 seq=0 pid=1116
refcnt=1
target1#
target1# sendMessagesSync: never got /usr/sbin/setkey -c <<EODspdadd 3ffe:501:ffff:100::/64 3ffe:501:ffff:104::/64 any -P out ipsec esp/tunnel/3ffe:501:ffff:102::1-3ffe:501:ffff:103::11/require;spddump;EOD
echo $status
0
~
[EOT]
|
| Target: Set IKE SA entries: dst=3ffe:501:ffff:103::11 dst_port=500 exchange_mode=aggressive doi=ipsec_doi situation=identity_only isakmp_src_id_type=address isakmp_src_id=3ffe:501:ffff:102::1 dh_group=2 lifetime=28800 lifetime_unit=seconds encryption_algorithm=3des hash_algorithm=sha1 authentication_method=pre_shared_key key_id=3ffe:501:ffff:103::11 key_value=0x494b452d54455354 ph2_id_type=address ph2_src_id=3ffe:501:ffff:100::/64 ph2_dst_id=3ffe:501:ffff:104::/64 ph2_src_upper=any ph2_dst_upper=any ipsec_p_num=1 ipsec_p1_t_num=1 ph2_p1_t1_lt=8 ph2_p1_t1_lt_unit=hour ph2_p1_t1_enc_alg=ESP_3DES ph2_p1_t1_auth_mtd=HMAC_SHA | |
| 14:09:18 |
vRemote(ikeSetSA.rmt) ``/usr/local/v6eval//bin/freebsd-i386//ikeSetSA.rmt -t freebsd-i386 -u root -p v6eval -d cuad0 -o 1 dst=3ffe:501:ffff:103::11 dst_port=500 exchange_mode=aggressive doi=ipsec_doi situation=identity_only isakmp_src_id_type=address isakmp_src_id=3ffe:501:ffff:102::1 dh_group=2 lifetime=28800 lifetime_unit=seconds encryption_algorithm=3des hash_algorithm=sha1 authentication_method=pre_shared_key key_id=3ffe:501:ffff:103::11 key_value=0x494b452d54455354 ph2_id_type=address ph2_src_id=3ffe:501:ffff:100::/64 ph2_dst_id=3ffe:501:ffff:104::/64 ph2_src_upper=any ph2_dst_upper=any ipsec_p_num=1 ipsec_p1_t_num=1 ph2_p1_t1_lt=8 ph2_p1_t1_lt_unit=hour ph2_p1_t1_enc_alg=ESP_3DES ph2_p1_t1_auth_mtd=HMAC_SHA ''
Connected target1# target1# ~[set] echocheck target1# target1# ~[put] freebsd-i386.psk.txt /tmp/psk.txt Dtarget1# target1# target1# /bin/chmod 600 /tmp/psk.txt target1# echo $status 0 target1# ~[set] echocheck target1# target1# ~[put] freebsd-i386.ike.conf /tmp/ike.conf Dtarget1# target1# target1# test -f /var/run/racoon.pid &&kill -TERM `head -1 /var/run/racoon.pid` target1# target1# echo $status 1 target1# /usr/local/sbin/racoon -f /tmp/ike.conf target1# target1# echo $status 0 ~ [EOT] |
| 14:09:32 | vRemote(ikeEnable.rmt) ``/usr/local/v6eval//bin/freebsd-i386//ikeEnable.rmt -t freebsd-i386 -u root -p v6eval -d cuad0 -o 1 '' |
|
*** Target initialization phase *** |
|
| 14:09:33 | Start Capturing Packets (Link0) |
| 14:09:33 | Start Capturing Packets (Link1) |
|
*** Target testing phase *** |
|
| 14:09:33 | Clear Captured Packets (Link1) |
| 14:09:33 | Clear Captured Packets (Link0) |
|
*** Phase-1 1st message recv *** |
|
| 14:09:33 |
vSend(Link1,echo_request_send_net0host1_net4host2) Send Echo Request from Host-1(TN) to Host-2(TN) via SGW1(NUT) |
| 14:09:34 | vRecv(Link0,isakmp_phase1_recv router_ns_multi router_ns_uni_link1 router_ns_uni_tll_sll_link1 router_ns_multi_llt_link1 router_ns_uni_sll router_ns_uni router_ns_multi_llt router_ns_uni_sll_link1 router_ns_multi_link1 router_ns_uni_tll_sll) timeout:10 cntLimit:0 seektime:0 Recv 1st message from HOST1(NUT) |
|
OK payload_check *** Phase-1 2nd message send *** |
|
| 14:09:34 | Clear Captured Packets (Link0) |
| 14:09:34 |
vSend(Link0,isakmp_phase1_send_2nd_agg) Send 2nd message from HOST2(TN) |
|
*** Phase-1 3rd message recv *** |
|
| 14:09:35 | vRecv(Link0,isakmp_phase1_recv_3rd isakmp_phase1_recv_3rd_agg_enc router_ns_multi router_ns_uni_link1 router_ns_uni_tll_sll_link1 router_ns_multi_llt_link1 router_ns_uni_sll router_ns_uni router_ns_multi_llt router_ns_uni_sll_link1 router_ns_multi_link1 router_ns_uni_tll_sll) timeout:5 cntLimit:0 seektime:0 Recv 3rd message from HOST1(NUT) |
|
****OK payload_check payload_check_Hash OK payload_check NG:Phase-1 3rd message is returned. Target: Reset IKE SA entries: saddump |
|
| 14:09:35 |
vRemote(ikeResetSA.rmt) ``/usr/local/v6eval//bin/freebsd-i386//ikeResetSA.rmt -t freebsd-i386 -u root -p v6eval -d cuad0 -o 1 saddump ''
Connected
target1#
target1# /usr/sbin/setkey -c <<EOD
dump;
flush;
E? dump;
? flush;
OD
? EOD
3ffe:501:ffff:103::11 3ffe:501:ffff:102::1
esp mode=tunnel spi=132994762(0x07ed56ca) reqid=0(0x00000000)
seq=0x00000000 replay=0 flags=0x00000000 state=larval
sadb_seq=0 pid=1123 refcnt=1
target1#
target1# sendMessagesSync: never got /usr/sbin/setkey -c <<EODdump;flush;EOD
echo $status
0
target1# kill -TERM `head -1 /var/run/racoon.pid`
target1#
target1#
echo $status
target1# echo $status
0
/bin/rm -f /var/run/racoon.pid
target1# /bin/rm -f /var/run/racoon.pid
target1#
target1# echo $status
0
~
[EOT]
|
| Target: Clear SPD entries: spddump | |
| 14:09:42 |
vRemote(ipsecResetSPD.rmt) ``/usr/local/v6eval//bin/freebsd-i386//ipsecResetSPD.rmt -t freebsd-i386 -u root -p v6eval -d cuad0 -o 1 spddump ''
Connected
target1#
target1# /usr/sbin/setkey -c <<EOD
spddump;
spdflu? spddump;
sh;
EOD
? spdflush;
EOD
? EOD
3ffe:501:ffff:100::/64[any] 3ffe:501:ffff:104::/64[any] any
out ipsec
esp/tunnel/3ffe:501:ffff:102::1-3ffe:501:ffff:103::11/require
created: Mar 16 14:16:22 2006 lastused: Mar 16 14:16:42 2006
lifetime: 0(s) validtime: 0(s)
spid=17015 seq=0 pid=1126
refcnt=1
target1#
target1# sendMessagesSync: never got /usr/sbin/setkey -c <<EODspddump;spdflush;EOD
echo $status
0
~
[EOT]
|
| 14:09:48 | End |
Frame_Ether (length:70) | Hdr_Ether (length:14) | | DestinationAddress = 00:00:02:00:26:ba | | SourceAddress = 00:00:00:00:00:10 | | Type = 34525 | Packet_IPv6 (length:56) | | Hdr_IPv6 (length:40) | | | Version = 6 | | | TrafficClass = 0 | | | FlowLabel = 0 | | | PayloadLength = 16 | | | NextHeader = 58 | | | HopLimit = 64 | | | SourceAddress = 3ffe:501:ffff:100::13 | | | DestinationAddress = 3ffe:501:ffff:104::11 | | ICMPv6_EchoRequest (length:16) | | | Type = 128 | | | Code = 0 | | | Checksum = 36089 calc(36089) | | | Identifier = 0 | | | SequenceNumber = 0 | | | Payload (length:8) | | | | data = 4563686f 44617461
Frame_Ether (length:318) | Hdr_Ether (length:14) | | DestinationAddress = 00:00:00:00:00:11 | | SourceAddress = 00:00:02:00:27:cd | | Type = 34525 | Packet_IPv6 (length:304) | | Hdr_IPv6 (length:40) | | | Version = 6 | | | TrafficClass = 0 | | | FlowLabel = 0 | | | PayloadLength = 264 | | | NextHeader = 17 | | | HopLimit = 64 | | | SourceAddress = 3ffe:501:ffff:102::1 | | | DestinationAddress = 3ffe:501:ffff:103::11 | | Upp_UDP (length:264) | | | Hdr_UDP (length:8) | | | | SourcePort = 500 | | | | DestinationPort = 500 | | | | Length = 264 | | | | Checksum = 9645 calc(9645) | | | Udp_ISAKMP (length:256) | | | | Hdr_ISAKMP (length:28) | | | | | InitiatorCookie = 4449811e30287925 | | | | | ResponderCookie = 0000000000000000 | | | | | NextPayload = 1 | | | | | MjVer = 1 | | | | | MnVer = 0 | | | | | ExchangeType = 4 | | | | | Reserved = 0 | | | | | AFlag = 0 | | | | | CFlag = 0 | | | | | EFlag = 0 | | | | | MessageID = 0 | | | | | Length = 256 | | | | Pld_ISAKMP_SA_IPsec_IDonly (length:52) | | | | | NextPayload = 4 | | | | | Reserved1 = 0 | | | | | PayloadLength = 52 | | | | | DOI = 1 | | | | | Situation = 1 | | | | | Pld_ISAKMP_P_ISAKMP (length:40) | | | | | | NextPayload = 0 | | | | | | Reserved1 = 0 | | | | | | PayloadLength = 40 | | | | | | ProposalNumber = 1 | | | | | | ProtocolID = 1 | | | | | | SPIsize = 0 | | | | | | NumOfTransforms = 1 | | | | | | SPI = | | | | | | Pld_ISAKMP_T (length:32) | | | | | | | NextPayload = 0 | | | | | | | Reserved1 = 0 | | | | | | | PayloadLength = 32 | | | | | | | TransformNumber = 1 | | | | | | | TransformID = 1 | | | | | | | Reserved2 = 0 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 11 | | | | | | | | Value = 1 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 12 | | | | | | | | Value = 28800 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 1 | | | | | | | | Value = 5 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 3 | | | | | | | | Value = 1 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 2 | | | | | | | | Value = 2 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 4 | | | | | | | | Value = 2 | | | | Pld_ISAKMP_KE (length:132) | | | | | NextPayload = 10 | | | | | Reserved1 = 0 | | | | | PayloadLength = 132 | | | | | KeyExchangeData = | | | | | 86520ebf b1859114 8ccc5ae7 d3c9cd8e 7cf8055e e4aa4156 d1b75378 6f00dc87 | | | | | 4d5113b9 e29f6553 b938aa7b 583ffda7 e2872013 00110885 39349c24 85d86498 | | | | | 34618b6f c98f9069 e84875bb 78969224 c5564f4b 64b2c8a7 8291565b 146ba448 | | | | | aafea7ad ff25d934 a7f75cf0 399aa679 759b701a 7c55c0d2 395bb0e7 1be8bc68 | | | | Pld_ISAKMP_NONCE (length:20) | | | | | NextPayload = 5 | | | | | Reserved1 = 0 | | | | | PayloadLength = 20 | | | | | NonceData = bbed7fe1 a088cdb2 c7e97ec0 984f838a | | | | Pld_ISAKMP_ID_IPV6_ADDR (length:24) | | | | | NextPayload = 0 | | | | | Reserved1 = 0 | | | | | PayloadLength = 24 | | | | | IDtype = 5 | | | | | ProtocolID = 17 | | | | | Port = 500 | | | | | ID = 3ffe:501:ffff:102::1 ===isakmp_phase1_recv=================================
Frame_Ether (length:347) | Hdr_Ether (length:14) | | DestinationAddress = 00:00:02:00:27:cd | | SourceAddress = 00:00:00:00:00:11 | | Type = 34525 | Packet_IPv6 (length:333) | | Hdr_IPv6 (length:40) | | | Version = 6 | | | TrafficClass = 0 | | | FlowLabel = 0 | | | PayloadLength = 293 | | | NextHeader = 17 | | | HopLimit = 64 | | | SourceAddress = 3ffe:501:ffff:103::11 | | | DestinationAddress = 3ffe:501:ffff:102::1 | | Upp_UDP (length:293) | | | Hdr_UDP (length:8) | | | | SourcePort = 500 | | | | DestinationPort = 500 | | | | Length = 293 | | | | Checksum = 40938 calc(40938) | | | Udp_ISAKMP (length:285) | | | | Hdr_ISAKMP (length:28) | | | | | InitiatorCookie = 4449811e30287925 | | | | | ResponderCookie = 829286c194b84c21 | | | | | NextPayload = 1 | | | | | MjVer = 1 | | | | | MnVer = 0 | | | | | ExchangeType = 4 | | | | | Reserved = 0 | | | | | AFlag = 0 | | | | | CFlag = 0 | | | | | EFlag = 0 | | | | | MessageID = 0 | | | | | Length = 285 | | | | Pld_ISAKMP_SA_IPsec_IDonly (length:57) | | | | | NextPayload = 4 | | | | | Reserved1 = 0 | | | | | PayloadLength = 57 | | | | | DOI = 1 | | | | | Situation = 1 | | | | | Pld_ISAKMP_P_ISAKMP (length:45) | | | | | | NextPayload = 0 | | | | | | Reserved1 = 0 | | | | | | PayloadLength = 45 | | | | | | ProposalNumber = 1 | | | | | | ProtocolID = 1 | | | | | | SPIsize = 1 | | | | | | NumOfTransforms = 1 | | | | | | SPI = 01 | | | | | | Pld_ISAKMP_T (length:36) | | | | | | | NextPayload = 0 | | | | | | | Reserved1 = 0 | | | | | | | PayloadLength = 36 | | | | | | | TransformNumber = 1 | | | | | | | TransformID = 1 | | | | | | | Reserved2 = 0 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 1 | | | | | | | | Value = 5 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 2 | | | | | | | | Value = 2 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 3 | | | | | | | | Value = 1 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 4 | | | | | | | | Value = 2 | | | | | | | Attr_ISAKMP_TV (length:4) | | | | | | | | AF = 1 | | | | | | | | Type = 11 | | | | | | | | Value = 1 | | | | | | | Attr_ISAKMP_TLV (length:8) | | | | | | | | AF = 0 | | | | | | | | Type = 12 | | | | | | | | Length = 4 | | | | | | | | Value = 00007080 | | | | Pld_ISAKMP_KE (length:132) | | | | | NextPayload = 10 | | | | | Reserved1 = 0 | | | | | PayloadLength = 132 | | | | | KeyExchangeData = | | | | | 92c038d6 7c36d9d7 e421d566 0e929a63 9e211dfa dd8fb275 dabed3d0 c396351e | | | | | c0148f58 153adcd2 bd264b86 a7588e4e faeaf4cf ceec6136 d39a29dd b44e6f70 | | | | | 81d2ee25 10ecaaf2 53cae411 1671bb4f 1bf81597 500beccb 950abbcf 56a86c11 | | | | | 1dcebed3 2b239c61 669f7d3a 4ecdd239 64d3d326 a069fc5b 5d2d27cc 2adc466c | | | | Pld_ISAKMP_NONCE (length:20) | | | | | NextPayload = 5 | | | | | Reserved1 = 0 | | | | | PayloadLength = 20 | | | | | NonceData = 00000000 00000000 00000000 00000000 | | | | Pld_ISAKMP_ID_IPV6_ADDR (length:24) | | | | | NextPayload = 8 | | | | | Reserved1 = 0 | | | | | PayloadLength = 24 | | | | | IDtype = 5 | | | | | ProtocolID = 17 | | | | | Port = 500 | | | | | ID = 3ffe:501:ffff:103::11 | | | | Pld_ISAKMP_HASH (length:24) | | | | | NextPayload = 0 | | | | | Reserved1 = 0 | | | | | PayloadLength = 24 | | | | | HashData = | | | | | bea2b488 55ec9e05 1c317b26 76fef016 c3425efc
===ALGORITHM LISTS BEGIN====================
--------------------------------------------
frame=isakmp_phase1_recv_3rd_agg_enc
ESP=alg_isakmp_phase1_recv_5th
crypt=ike_des3cbc(hexstr("7f7945fedf62409890143e3abfadcf149ab2926df8afdb94b60552bab3fb1ee160d4dd485e16ad65d3a3c4cee84607316878382377fb3fb8307a0568",24),p1_iv("sha1",hexstr("86520ebfb18591148ccc5ae7d3c9cd8e7cf8055ee4aa4156d1b753786f00dc874d5113b9e29f6553b938aa7b583ffda7e28720130011088539349c2485d8649834618b6fc98f9069e84875bb78969224c5564f4b64b2c8a78291565b146ba448aafea7adff25d934a7f75cf0399aa679759b701a7c55c0d2395bb0e71be8bc68"),hexstr("92C038D67C36D9D7E421D5660E929A639E211DFADD8FB275DABED3D0C396351EC0148F58153ADCD2BD264B86A7588E4EFAEAF4CFCEEC6136D39A29DDB44E6F7081D2EE2510ECAAF253CAE4111671BB4F1BF81597500BECCB950ABBCF56A86C111DCEBED32B239C61669F7D3A4ECDD23964D3D326A069FC5B5D2D27CC2ADC466C"),8))
--------------------------------------------
===ALGORITHM LISTS END======================
Frame_Ether (length:114)
| Hdr_Ether (length:14)
| | DestinationAddress = 00:00:00:00:00:11
| | SourceAddress = 00:00:02:00:27:cd
| | Type = 34525
| Packet_IPv6 (length:100)
| | Hdr_IPv6 (length:40)
| | | Version = 6
| | | TrafficClass = 0
| | | FlowLabel = 0
| | | PayloadLength = 60
| | | NextHeader = 17
| | | HopLimit = 64
| | | SourceAddress = 3ffe:501:ffff:102::1
| | | DestinationAddress = 3ffe:501:ffff:103::11
| | Upp_UDP (length:60)
| | | Hdr_UDP (length:8)
| | | | SourcePort = 500
| | | | DestinationPort = 500
| | | | Length = 60
| | | | Checksum = 548 calc(548)
| | | Udp_ISAKMP (length:52)
| | | | Hdr_ISAKMP (length:28)
| | | | | InitiatorCookie = 4449811e30287925
| | | | | ResponderCookie = 829286c194b84c21
| | | | | NextPayload = 8
| | | | | MjVer = 1
| | | | | MnVer = 0
| | | | | ExchangeType = 4
| | | | | Reserved = 0
| | | | | AFlag = 0
| | | | | CFlag = 0
| | | | | EFlag = 0
| | | | | MessageID = 0
| | | | | Length = 52
| | | | Pld_ISAKMP_HASH (length:24)
| | | | | NextPayload = 0
| | | | | Reserved1 = 0
| | | | | PayloadLength = 24
| | | | | HashData =
| | | | | f7eb22b0 9a75345b b69bacba ad0012dd efb40bc0
===isakmp_phase1_recv_3rd=================================