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

Commit 797659fb authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo Committed by David S. Miller
Browse files

[PPPOE]: Introduce pppoe_hdr()



For consistency with all the other skb->nh.raw accessors.

Also do some really obvious simplifications in pppoe_recvmsg, well the
kfree_skb one is not so obvious, but free() and kfree() have the same behaviour
(hint :-) ).

Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 37e66366
Loading
Loading
Loading
Loading
+8 −14
Original line number Diff line number Diff line
@@ -347,7 +347,7 @@ static int pppoe_rcv_core(struct sock *sk, struct sk_buff *skb)
	struct pppox_sock *relay_po = NULL;

	if (sk->sk_state & PPPOX_BOUND) {
		struct pppoe_hdr *ph = (struct pppoe_hdr *) skb->nh.raw;
		struct pppoe_hdr *ph = pppoe_hdr(skb);
		int len = ntohs(ph->length);
		skb_pull_rcsum(skb, sizeof(struct pppoe_hdr));
		if (pskb_trim_rcsum(skb, len))
@@ -401,7 +401,7 @@ static int pppoe_rcv(struct sk_buff *skb,
	if (!(skb = skb_share_check(skb, GFP_ATOMIC)))
		goto out;

	ph = (struct pppoe_hdr *) skb->nh.raw;
	ph = pppoe_hdr(skb);

	po = get_item((unsigned long) ph->sid, eth_hdr(skb)->h_source, dev->ifindex);
	if (po != NULL)
@@ -433,7 +433,7 @@ static int pppoe_disc_rcv(struct sk_buff *skb,
	if (!(skb = skb_share_check(skb, GFP_ATOMIC)))
		goto out;

	ph = (struct pppoe_hdr *) skb->nh.raw;
	ph = pppoe_hdr(skb);
	if (ph->code != PADT_CODE)
		goto abort;

@@ -931,8 +931,6 @@ static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock,
	struct sock *sk = sock->sk;
	struct sk_buff *skb = NULL;
	int error = 0;
	int len;
	struct pppoe_hdr *ph = NULL;

	if (sk->sk_state & PPPOX_BOUND) {
		error = -EIO;
@@ -949,18 +947,14 @@ static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock,
	m->msg_namelen = 0;

	if (skb) {
		error = 0;
		ph = (struct pppoe_hdr *) skb->nh.raw;
		len = ntohs(ph->length);
		struct pppoe_hdr *ph = pppoe_hdr(skb);
		const int len = ntohs(ph->length);

		error = memcpy_toiovec(m->msg_iov, (unsigned char *) &ph->tag[0], len);
		if (error < 0)
			goto do_skb_free;
		if (error == 0)
			error = len;
	}

do_skb_free:
	if (skb)
	kfree_skb(skb);
end:
	return error;
+7 −0
Original line number Diff line number Diff line
@@ -112,6 +112,13 @@ struct pppoe_hdr {
} __attribute__ ((packed));

#ifdef __KERNEL__
#include <linux/skbuff.h>

static inline struct pppoe_hdr *pppoe_hdr(const struct sk_buff *skb)
{
	return (struct pppoe_hdr *)skb->nh.raw;
}

struct pppoe_opt {
	struct net_device      *dev;	  /* device associated with socket*/
	int			ifindex;  /* ifindex of device associated with socket */