Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5dd17e08 authored by Changli Gao's avatar Changli Gao Committed by David S. Miller
Browse files

net: rps: fix the support for PPPOE



The upper protocol numbers of PPPOE are different, and should be treated
specially.

Signed-off-by: default avatarChangli Gao <xiaosuo@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 16e57262
Loading
Loading
Loading
Loading
+11 −1
Original line number Original line Diff line number Diff line
@@ -135,6 +135,7 @@
#include <linux/cpu_rmap.h>
#include <linux/cpu_rmap.h>
#include <linux/if_tunnel.h>
#include <linux/if_tunnel.h>
#include <linux/if_pppox.h>
#include <linux/if_pppox.h>
#include <linux/ppp_defs.h>


#include "net-sysfs.h"
#include "net-sysfs.h"


@@ -2556,6 +2557,7 @@ void __skb_get_rxhash(struct sk_buff *skb)
again:
again:
	switch (proto) {
	switch (proto) {
	case __constant_htons(ETH_P_IP):
	case __constant_htons(ETH_P_IP):
ip:
		if (!pskb_may_pull(skb, sizeof(*ip) + nhoff))
		if (!pskb_may_pull(skb, sizeof(*ip) + nhoff))
			goto done;
			goto done;


@@ -2569,6 +2571,7 @@ again:
		nhoff += ip->ihl * 4;
		nhoff += ip->ihl * 4;
		break;
		break;
	case __constant_htons(ETH_P_IPV6):
	case __constant_htons(ETH_P_IPV6):
ipv6:
		if (!pskb_may_pull(skb, sizeof(*ip6) + nhoff))
		if (!pskb_may_pull(skb, sizeof(*ip6) + nhoff))
			goto done;
			goto done;


@@ -2591,7 +2594,14 @@ again:
		proto = *((__be16 *) (skb->data + nhoff +
		proto = *((__be16 *) (skb->data + nhoff +
				      sizeof(struct pppoe_hdr)));
				      sizeof(struct pppoe_hdr)));
		nhoff += PPPOE_SES_HLEN;
		nhoff += PPPOE_SES_HLEN;
		goto again;
		switch (proto) {
		case __constant_htons(PPP_IP):
			goto ip;
		case __constant_htons(PPP_IPV6):
			goto ipv6;
		default:
			goto done;
		}
	default:
	default:
		goto done;
		goto done;
	}
	}