#include <net/ip.h>
 #include <net/dsa.h>
 #include <net/flow_dissector.h>
+#include <net/gro.h>
 #include <linux/uaccess.h>
 #include <net/pkt_sched.h>
 
 
        skb_gro_pull(skb, sizeof(*eh));
        skb_gro_postpull_rcsum(skb, eh, sizeof(*eh));
-       pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb);
+
+       pp = indirect_call_gro_receive_inet(ptype->callbacks.gro_receive,
+                                           ipv6_gro_receive, inet_gro_receive,
+                                           head, skb);
 
 out_unlock:
        rcu_read_unlock();
        rcu_read_lock();
        ptype = gro_find_complete_by_type(type);
        if (ptype != NULL)
-               err = ptype->callbacks.gro_complete(skb, nhoff +
-                                                   sizeof(struct ethhdr));
+               err = INDIRECT_CALL_INET(ptype->callbacks.gro_complete,
+                                        ipv6_gro_complete, inet_gro_complete,
+                                        skb, nhoff + sizeof(*eh));
 
        rcu_read_unlock();
        return err;