|
@@ -1197,40 +1197,6 @@ int inet_sk_rebuild_header(struct sock *sk)
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(inet_sk_rebuild_header);
|
|
EXPORT_SYMBOL(inet_sk_rebuild_header);
|
|
|
|
|
|
-static int inet_gso_send_check(struct sk_buff *skb)
|
|
|
|
-{
|
|
|
|
- const struct net_offload *ops;
|
|
|
|
- const struct iphdr *iph;
|
|
|
|
- int proto;
|
|
|
|
- int ihl;
|
|
|
|
- int err = -EINVAL;
|
|
|
|
-
|
|
|
|
- if (unlikely(!pskb_may_pull(skb, sizeof(*iph))))
|
|
|
|
- goto out;
|
|
|
|
-
|
|
|
|
- iph = ip_hdr(skb);
|
|
|
|
- ihl = iph->ihl * 4;
|
|
|
|
- if (ihl < sizeof(*iph))
|
|
|
|
- goto out;
|
|
|
|
-
|
|
|
|
- proto = iph->protocol;
|
|
|
|
-
|
|
|
|
- /* Warning: after this point, iph might be no longer valid */
|
|
|
|
- if (unlikely(!pskb_may_pull(skb, ihl)))
|
|
|
|
- goto out;
|
|
|
|
- __skb_pull(skb, ihl);
|
|
|
|
-
|
|
|
|
- skb_reset_transport_header(skb);
|
|
|
|
- err = -EPROTONOSUPPORT;
|
|
|
|
-
|
|
|
|
- ops = rcu_dereference(inet_offloads[proto]);
|
|
|
|
- if (likely(ops && ops->callbacks.gso_send_check))
|
|
|
|
- err = ops->callbacks.gso_send_check(skb);
|
|
|
|
-
|
|
|
|
-out:
|
|
|
|
- return err;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
|
|
static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
|
|
netdev_features_t features)
|
|
netdev_features_t features)
|
|
{
|
|
{
|
|
@@ -1655,7 +1621,6 @@ static int ipv4_proc_init(void);
|
|
static struct packet_offload ip_packet_offload __read_mostly = {
|
|
static struct packet_offload ip_packet_offload __read_mostly = {
|
|
.type = cpu_to_be16(ETH_P_IP),
|
|
.type = cpu_to_be16(ETH_P_IP),
|
|
.callbacks = {
|
|
.callbacks = {
|
|
- .gso_send_check = inet_gso_send_check,
|
|
|
|
.gso_segment = inet_gso_segment,
|
|
.gso_segment = inet_gso_segment,
|
|
.gro_receive = inet_gro_receive,
|
|
.gro_receive = inet_gro_receive,
|
|
.gro_complete = inet_gro_complete,
|
|
.gro_complete = inet_gro_complete,
|
|
@@ -1664,7 +1629,6 @@ static struct packet_offload ip_packet_offload __read_mostly = {
|
|
|
|
|
|
static const struct net_offload ipip_offload = {
|
|
static const struct net_offload ipip_offload = {
|
|
.callbacks = {
|
|
.callbacks = {
|
|
- .gso_send_check = inet_gso_send_check,
|
|
|
|
.gso_segment = inet_gso_segment,
|
|
.gso_segment = inet_gso_segment,
|
|
.gro_receive = inet_gro_receive,
|
|
.gro_receive = inet_gro_receive,
|
|
.gro_complete = inet_gro_complete,
|
|
.gro_complete = inet_gro_complete,
|