Hi,
I. Details
I was using a nsis-0.5.0-dev.tar.gz version that I downloaded around 2006-11-07. Let me call it nsis050old. (I can sent it, if you want). The new version that I used was downloaded yesterday. Let me call it nsis050new.
My scenario is
NI 192.168.1.2 (Linux) ---------------- NF 192.168.1.1 (openWrt)
In NI I was using nsis050old. In NF I was using nsis050new, except the directory natfw that was replaced by natfw directory of nsis050old.
II. About
{
I do not know how related are ping to NATFW projects. I could not use ping, with your last release (mixed with NATFW directory).
They are not related at all, except for the fact that both use the NSLP API. Can you explain the problem with ping? }
I said "I do not know how related are ping to NATFW projects" , because:
I ran nsis-natfw at the NI and at the NF I got the following.
Note *** GistException: Invalid ping message. Length invalid *** at the end.:
root@OpenWrt:/home# nsis -debug 0 (err) Using 192.168.1.1 as local IPv4 address (err) Using 192.168.2.1 as local IPv4 address (err) Setting Debug Level to 0 NSIS daemon v0.5.0-dev starting ... My PID id = 2511 FD is -1 TEST: no Starting pingServer (pid: 2512) ... Starting natfwServer (pid: 2513) ... (info) NSIS NAT/Firewall NSLP daemon starting... (info) (NatFw) Router: yes (info) (NatFw) Edge-Router: yes (info) (NatFw) NAT: no (info) (NatFw) Firewall: yes (info) (NatFw) external IP addr: 192.168.2.1 (info) (NatFw) router is a Firewall! (TBD) Socket 4 has new data (warn) *** Connection over Unix Socket *** (warn) register_unix_sd : new connection sd[8] added to Event Loop. (TBD) Socket 8 has new data (warn) *** Received API Call *** (info) (NatFw) createServerSocket (TBD) Socket 4 has new data (warn) *** Connection over Unix Socket *** (warn) register_unix_sd : new connection sd[9] added to Event Loop. (TBD) Socket 9 has new data (warn) *** Received API Call *** (info) (NatFw) connected to GIST server (TBD) Socket 5 has new data (warn) *** Received RAO packet (value = 00 00) *** (warn) *** Dmode message from : 192.168.1.2:33294> *** (info) GIST message: Version = 1 hops = 4 Signaling Application ID = 3 Message length = 144 (info) Type = QUERY (info) S flag = 0 (info) R flag = 1 (info) GistMriPathCoupled: length = 56 (info) Direction = Downstream (info) Source IP = 192.168.1.2 (info) Dest IP = 130.233.240.9 (info) Source Port = 0 (info) Destination Port = 0 (info) GistSessionId: length = 20 (info) (info) cc (info) 41 (info) 99 (info) 75 (info) c2 (info) 7d (info) 76 (info) 1f (info) 0e (info) 2b (info) c2 (info) ee (info) f0 (info) 67 (info) 9a (info) 2f (info) (info) GistNetworkLayerInfo: length = 28 (info) IntAddr = 192.168.1.2 (info) RouteStateValidityTime = 180000 (info) GistQueryCookie: length = 36 (info) GistStackProposal: length = 12; profileCount = 1 (info) Profile 1: (info) TCP (info) (info) GistStackConfigurationData: length = 16 (warn) *** This is a UNknown flow *** (info) FSM: Change state to 0 (info) FSM: Event 5 while state is 0 (warn) Creating new MA (warn) register_server_sd : new connection sd[10] added to Event Loop. (info) FSM: Change state to 1 (TBD) Socket 10 has new data (warn) Found the pending MA (warn) *** Cmode connect via IPv4 from : 192.168.1.2:34035 *** (warn) register_sd : new connection sd[11] added to Event Loop. (TBD) Socket 11 has new data (info) GIST message: Version = 1 hops = 4 Signaling Application ID = 3 Message length = 116 (info) Type = CONFIRM (info) S flag = 1 (info) R flag = 0 (info) GistMriPathCoupled: length = 56 (info) Direction = Downstream (info) Source IP = 192.168.1.2 (info) Dest IP = 130.233.240.9 (info) Source Port = 0 (info) Destination Port = 0 (info) GistSessionId: length = 20 (info) (info) cc (info) 41 (info) 99 (info) 75 (info) c2 (info) 7d (info) 76 (info) 1f (info) 0e (info) 2b (info) c2 (info) ee (info) f0 (info) 67 (info) 9a (info) 2f (info) (info) GistNetworkLayerInfo: length = 28 (info) IntAddr = 192.168.1.2 (info) RouteStateValidityTime = 180000 (info) GistResponderCookie: length = 36 (warn) *** This is a known flow *** (info) FSM: Event 9 while state is 1 (info) FSM: Change state to 4 (info) GIST message: Version = 1 hops = 4 Signaling Application ID = 3 Message length = 108 (info) Type = DATA (info) S flag = 0 (info) R flag = 0 (info) GistMriPathCoupled: length = 56 (info) Direction = Downstream (info) Source IP = 192.168.1.2 (info) Dest IP = 130.233.240.9 (info) Source Port = 0 (info) Destination Port = 0 (info) GistSessionId: length = 20 (info) (info) cc (info) 41 (info) 99 (info) 75 (info) c2 (info) 7d (info) 76 (info) 1f (info) 0e (info) 2b (info) c2 (info) ee (info) f0 (info) 67 (info) 9a (info) 2f (info) (info) GistNetworkLayerInfo: length = 24 (info) IntAddr = 192.168.1.2 (info) RouteStateValidityTime = 180000 (info) GistNslpData: length = 32; payloadLength = 28 (warn) *** This is a known flow *** (info) FSM: Event 11 while state is 4 (info) *** API-Call RecvMessage() ***
(info) nslp_data : (info) nd_size : 28 (info) nslp_id : 0x0003 (info) sid : (info) 0xcc (info) 0x41 (info) 0x99 (info) 0x75 (info) 0xc2 (info) 0x7d (info) 0x76 (info) 0x1f (info) 0x0e (info) 0x2b (info) 0xc2 (info) 0xee (info) 0xf0 (info) 0x67 (info) 0x9a (info) 0x2f (info) (info) mri->msgRoutingMethod : 0x0000 (info) mri->s : 0 (info) mri->f : 0 (info) mri->t : 0 (info) mri->p : 1 (info) mri->ipVersion : 0x04 (info) mri->reserved : 0x00 (info) mri->d : 0 (info) mri->b : 1 (info) mri->a : 1 (info) mri->srcAddr : 192.168.1.2 (info) mri->destAddr : 130.233.240.9 (info) mri->srcPrefix : 0x20 (info) mri->destPrefix : 0x20 (info) mri->protocol : 0x00 (info) mri->diffserv_field : 0x00 (info) reliable : 1 (info) security : 0 (info) explicitlyRouted : 0 (info) noGistState : 0 (info) ip_ttl : 0 (info) ip_distance : 0 DataSize: 28, HeaderLength: 0, Calc: 3076(crit) *** GistException: Invalid ping message. Length invalid ***
(info) (NatFw) GenericObject::count: 0 (info) (NatFw) NatBinding::count: 0 (info) (NatFw) FwPinhole::count: 0
-- Note: I changed NatFwFsm::nf_rx_create() code. I removed all the NAT handling and added the following (borrowed from NatFwFsm::nf_waitresp_rx_response() ) in an attempt to implement the proxy mode (without NR case)
NatFwMessage responseMessage(NATFW_MESSAGETYPE_RESPONSE); responseMessage.addSessionLifetimeObject(new NatFwSessionLifetimeObject(1000)); responseMessage.addMsnObject(new NatFwMsnObject(recvMessage.msn->value())); responseMessage.addInformationCodeObject(new NatFwInformationCodeObject( NATFW_CLASS_SUCCESS, NATFW_CODE_SUCCESS_ALL, NATFW_MESSAGETYPE_CREATE));
printf("-*-*- 2 \n");
msg_routing_info_path_coupled_t pc_mri; pc_mri.msgRoutingMethod = GIST_DEFAULT_MRM; pc_mri.ipVersion = 4; pc_mri.srcAddr.v4.addr = data->recv_msg->mri->srcAddr.v4.addr; pc_mri.destAddr.v4.addr = data->recv_msg->mri->destAddr.v4.addr; pc_mri.srcPrefix = 32; pc_mri.destPrefix = 32; pc_mri.d = UPSTREAM; pc_mri.flowLabel = 0; pc_mri.destPort = 0; pc_mri.srcPort = 0; pc_mri.spi = 0;
III. About
{
Also I noticed some strange behavior with calls to data->server->SendMessage() from my old NATFW to the new 0.5.0-dev code, (like Queries instead of responses ).
Could you explain this in more detail? } In this case, I have the implementation in NatFwFsm::nf_rx_create() mentioned above. When I use my nsis050old at both sides, the code above sends the RESPONSE message correctly. When I mix the code as explained, I do not get a RESPONSE (what the code above is supposed to do) but I see en ethereal a GIST QUERY from NF to NI instead of a RESPONSE. (I do not know who is triggering it). Anyway, if your nsis050new is working properly I think that is not worth to spent time with a result of a mixed code...
All the above was tested with openWrt at the NF. It should be the same behavior with Linux...
Sergio.