lwf for modifying packet, TCP retransmission error occured

Hello, I am trying to develop ndis filter driver working as NAT driver. I want to change destination address.
I wrote code that if I try to access to specific dest IP (n.n.n.n), the driver changes the dest IP to another IP (m.m.m.m).
I think I am succeed to change destination address, because new destination ip address showed at wireshark.
However, putty showed me ‘connection timed out’ message, and there are only TCP SYN packets). TCP retransmission occured.
Please help me to know what’s wrong with my code. Even an uncertain guess would be of great help to me.

Here is my pseudo code.

FilterSendNetBufferLists :
eth = NdisGetDataBuffer(NetBuffer)
…ip=NdisGetDataBuffer(NetBuffer)
…if(ip protocol is 6)
…tcp = NdisGetDataBuffer(NetBuffer)
…if(ip dest addr is “n.n.n.n” && tcp dest port is 22)
…ClonedNbl = NdisAllocateCloneNetBufferList //already advanced about header size(eth+ip+tcp)
…retreated original Nbl and ClonedNbl
if(Clone made)
…m_eth = eth //m_eth is the pointer of cloned nbl that indicates where the ethernet header should be placed
…m_ip = ip
…m_ip_dst = StringToAddress(“m.m.m.m”)
…ip_checksum = Checksum(oldaddr, newaddr)
…m_tcp = tcp
…tcp_checksum = Checksum(oldaddr, newaddr)
…NET_BUFFER_LIST_NEXT_NBL(CurrNbl) = NULL
…CurrNbl->ChildRefCount++
…ClonedNbl->ParentNetBufferList = CurrNbl;
…ClonedNbl->SourceHandle = FilterModuleContext;
…NdisFSendNetBuferLists(FilterHandle, ClonedNbl…)
else
…NdisFSendNetBufferLists(FilterHAndle, NetBufferLists…)