|
@@ -2072,7 +2072,7 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb,
|
|
|
netdev_features_t features)
|
|
|
{
|
|
|
struct sk_buff *segs = ERR_PTR(-EPROTONOSUPPORT);
|
|
|
- struct packet_type *ptype;
|
|
|
+ struct packet_offload *ptype;
|
|
|
__be16 type = skb->protocol;
|
|
|
int vlan_depth = ETH_HLEN;
|
|
|
int err;
|
|
@@ -2101,9 +2101,8 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb,
|
|
|
}
|
|
|
|
|
|
rcu_read_lock();
|
|
|
- list_for_each_entry_rcu(ptype,
|
|
|
- &ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
|
|
|
- if (ptype->type == type && !ptype->dev && ptype->gso_segment) {
|
|
|
+ list_for_each_entry_rcu(ptype, &offload_base, list) {
|
|
|
+ if (ptype->type == type && ptype->gso_segment) {
|
|
|
if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) {
|
|
|
err = ptype->gso_send_check(skb);
|
|
|
segs = ERR_PTR(err);
|
|
@@ -3522,9 +3521,9 @@ static void flush_backlog(void *arg)
|
|
|
|
|
|
static int napi_gro_complete(struct sk_buff *skb)
|
|
|
{
|
|
|
- struct packet_type *ptype;
|
|
|
+ struct packet_offload *ptype;
|
|
|
__be16 type = skb->protocol;
|
|
|
- struct list_head *head = &ptype_base[ntohs(type) & PTYPE_HASH_MASK];
|
|
|
+ struct list_head *head = &offload_base;
|
|
|
int err = -ENOENT;
|
|
|
|
|
|
if (NAPI_GRO_CB(skb)->count == 1) {
|
|
@@ -3534,7 +3533,7 @@ static int napi_gro_complete(struct sk_buff *skb)
|
|
|
|
|
|
rcu_read_lock();
|
|
|
list_for_each_entry_rcu(ptype, head, list) {
|
|
|
- if (ptype->type != type || ptype->dev || !ptype->gro_complete)
|
|
|
+ if (ptype->type != type || !ptype->gro_complete)
|
|
|
continue;
|
|
|
|
|
|
err = ptype->gro_complete(skb);
|
|
@@ -3584,9 +3583,9 @@ EXPORT_SYMBOL(napi_gro_flush);
|
|
|
enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
|
|
|
{
|
|
|
struct sk_buff **pp = NULL;
|
|
|
- struct packet_type *ptype;
|
|
|
+ struct packet_offload *ptype;
|
|
|
__be16 type = skb->protocol;
|
|
|
- struct list_head *head = &ptype_base[ntohs(type) & PTYPE_HASH_MASK];
|
|
|
+ struct list_head *head = &offload_base;
|
|
|
int same_flow;
|
|
|
int mac_len;
|
|
|
enum gro_result ret;
|
|
@@ -3599,7 +3598,7 @@ enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
|
|
|
|
|
|
rcu_read_lock();
|
|
|
list_for_each_entry_rcu(ptype, head, list) {
|
|
|
- if (ptype->type != type || ptype->dev || !ptype->gro_receive)
|
|
|
+ if (ptype->type != type || !ptype->gro_receive)
|
|
|
continue;
|
|
|
|
|
|
skb_set_network_header(skb, skb_gro_offset(skb));
|