UPDATE
Well, I really don't know what is going on. I changed the phone's IPSec parameters to negotiate everything possible itself, just in case. The server is set to P1- 3DES/MD5, P2 - all/MD5. The dh group is the same on both ends. PFS is off on both ends. Here's what happens through some excerpts from the IPSec debug log:
Feb 2 00:22:38 gw2 racoon: ERROR: such policy does not already exist: "10.10.90.1/32[0] 192.168.43.0/24[0] proto=any dir=in"
Feb 2 00:22:38 gw2 racoon: DEBUG: pk_recv: retry[0] recv()
Feb 2 00:22:38 gw2 racoon: DEBUG: get pfkey X_SPDUPDATE message
Feb 2 00:22:38 gw2 racoon: DEBUG: sub:0xbfbfe6a4: 192.168.43.0/24[0] 10.10.90.1/32[0] proto=any dir=out
Feb 2 00:22:38 gw2 racoon: DEBUG: db :0x28548148: 192.168.43.0/24[0] 192.168.43.1/32[0] proto=any dir=in
Feb 2 00:22:38 gw2 racoon: DEBUG: sub:0xbfbfe6a4: 192.168.43.0/24[0] 10.10.90.1/32[0] proto=any dir=out
Feb 2 00:22:38 gw2 racoon: DEBUG: db :0x28548288: 192.168.43.1/32[0] 192.168.43.0/24[0] proto=any dir=out
Feb 2 00:22:38 gw2 racoon: DEBUG: sub:0xbfbfe6a4: 192.168.43.0/24[0] 10.10.90.1/32[0] proto=any dir=out
Feb 2 00:22:38 gw2 racoon: DEBUG: db :0x28548648: 10.10.90.1/32[0] 192.168.43.0/24[0] proto=any dir=in
Feb 2 00:22:38 gw2 racoon: ERROR: such policy does not already exist: "192.168.43.0/24[0] 10.10.90.1/32[0] proto=any dir=out"
-> Here the TFTP files download through the tunnel and the call server is contacted. The phone apparently logs into the call server. As soon as what appears to be the first data is sent from the phone, the tunnel is suddenly renegotiated with no error in the log:
Feb 2 00:24:01 gw2 racoon: DEBUG: ===
Feb 2 00:24:01 gw2 racoon: DEBUG: 722 bytes message received from 70.74.185.113[6767] to 75.152.250.47[4500]
Feb 2 00:24:01 gw2 racoon: DEBUG: e9496040 d098d033 00000000 00000000 01100400 00000000 000002d2 04000194 00000001 00000001 00000188 0a01000a 03000028 01010000 80010007 800e0080 80020002 80040002 80030001 800b0001 000c0004 00069780 03000028 02010000 80010007 800e0080 80020001 80040002 80030001 800b0001 000c0004 00069780 03000024 03010000 80010005 80020002 80040002 80030001 800b0001 000c0004 00069780 03000024 04010000 80010005 80020001 80040002 80030001 800b0001 000c0004 00069780 03000024 05010000 80010001 80020002 80040002 80030001 800b0001 000c0004 00069780 03000024 06010000 80010001 80020001 80040002 80030001 800b0001 000c0004 00069780 03000028 07010000 80010007 800e00c0 80020002 80040002 80030001 800b0001 000c0004 00069780 03000028 08010000 80010007 800e00c0 80020001 80040002 80030001 800b0001 000c0004 00069780 03000028 09010000 80010007 800e0100 80020002 80040002 80030001 800b0001 000c0004 00069780 00000028 0a010000 80010007 800e0100 80020001 80040002 80030001 800b0001 000c0004 00069780 0a000084 0bf87a
Feb 2 00:24:01 gw2 racoon: DEBUG: anonymous configuration selected for 70.74.185.113.
Feb 2 00:24:01 gw2 racoon: DEBUG: Marking ports as changed
Feb 2 00:24:01 gw2 racoon: DEBUG: ===
Feb 2 00:24:01 gw2 racoon: INFO: respond new phase 1 negotiation: 75.152.250.47[4500]<=>70.74.185.113[6767]
Feb 2 00:24:01 gw2 racoon: INFO: begin Aggressive mode.
…
-> The second attempt also appears to be successful, but ends as follows with a pfkey_DELETE. The tunnel is rebuilt, the phone resends its first data packet and it all falls apart again. Every following attempt follows the same pattern:
...
Feb 2 00:24:03 gw2 racoon: ERROR: such policy does not already exist: "10.10.90.1/32[0] 192.168.43.0/24[0] proto=any dir=in"
Feb 2 00:24:03 gw2 racoon: DEBUG: pk_recv: retry[0] recv()
Feb 2 00:24:03 gw2 racoon: DEBUG: get pfkey X_SPDUPDATE message
Feb 2 00:24:03 gw2 racoon: DEBUG: sub:0xbfbfe6a4: 192.168.43.0/24[0] 10.10.90.1/32[0] proto=any dir=out
Feb 2 00:24:03 gw2 racoon: DEBUG: db :0x28548148: 192.168.43.0/24[0] 192.168.43.1/32[0] proto=any dir=in
Feb 2 00:24:03 gw2 racoon: DEBUG: sub:0xbfbfe6a4: 192.168.43.0/24[0] 10.10.90.1/32[0] proto=any dir=out
Feb 2 00:24:03 gw2 racoon: DEBUG: db :0x28548288: 192.168.43.1/32[0] 192.168.43.0/24[0] proto=any dir=out
Feb 2 00:24:03 gw2 racoon: DEBUG: sub:0xbfbfe6a4: 192.168.43.0/24[0] 10.10.90.1/32[0] proto=any dir=out
Feb 2 00:24:03 gw2 racoon: DEBUG: db :0x28548648: 10.10.90.1/32[0] 192.168.43.0/24[0] proto=any dir=in
Feb 2 00:24:03 gw2 racoon: ERROR: such policy does not already exist: "192.168.43.0/24[0] 10.10.90.1/32[0] proto=any dir=out"
Feb 2 00:24:09 gw2 racoon: DEBUG: pk_recv: retry[0] recv()
Feb 2 00:24:09 gw2 racoon: DEBUG: get pfkey DELETE message
Feb 2 00:24:09 gw2 racoon: ERROR: pfkey DELETE received: ESP 75.152.250.47[4500]->70.74.185.113[6767] spi=1671308013(0x639e22ed)
If anyone can interpret this as to why it might be happening, I'd sure appreciate it.