found the problem. had to change the line:
ip->iph_len = Tx_UDPpayloadlength + sizeof(struct ipheader) + sizeof(struct udpheader);
to
ip->iph_len = htons(Tx_UDPpayloadlength + sizeof(struct ipheader) + sizeof(struct udpheader));
silly me, wasted the entire 2 days solving this !!
hopefully this code will help others to make a upd TX :)
also, i just realized, if you are not plugging in the device to a hub but sending directly to PC via cross over cable, you donot need to add the ip and udp header. just sending the data with its MAC header will allow you to capture the packet using a network sniffing code that binds to the network device.