skb_reset_mac_header(skb);
        skb_reset_network_header(skb);
 
-       /* Bugfix: need to give ip_route_input enough of an IP header to not gag. */
-       ip_hdr(skb)->protocol = IPPROTO_ICMP;
-       skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr));
-
        src = tb[RTA_SRC] ? nla_get_in_addr(tb[RTA_SRC]) : 0;
        dst = tb[RTA_DST] ? nla_get_in_addr(tb[RTA_DST]) : 0;
        iif = tb[RTA_IIF] ? nla_get_u32(tb[RTA_IIF]) : 0;
        else
                uid = (iif ? INVALID_UID : current_uid());
 
+       /* Bugfix: need to give ip_route_input enough of an IP header to
+        * not gag.
+        */
+       ip_hdr(skb)->protocol = IPPROTO_UDP;
+       ip_hdr(skb)->saddr = src;
+       ip_hdr(skb)->daddr = dst;
+
+       skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr));
+
        memset(&fl4, 0, sizeof(fl4));
        fl4.daddr = dst;
        fl4.saddr = src;