[PPP] pppoe: Fill in header directly in __pppoe_xmit

This patch removes the hdr variable (which is copied into the skb)
and instead sets the header directly in the skb.

It also uses __skb_push instead of skb_push since we've just checked
using skb_cow for enough head room.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Herbert Xu 2007-09-16 16:20:21 -07:00 committed by David S. Miller
parent db7bf6d97c
commit 9355ec2339

View File

@ -848,19 +848,12 @@ static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb)
{ {
struct pppox_sock *po = pppox_sk(sk); struct pppox_sock *po = pppox_sk(sk);
struct net_device *dev = po->pppoe_dev; struct net_device *dev = po->pppoe_dev;
struct pppoe_hdr hdr;
struct pppoe_hdr *ph; struct pppoe_hdr *ph;
int data_len = skb->len; int data_len = skb->len;
if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED)) if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED))
goto abort; goto abort;
hdr.ver = 1;
hdr.type = 1;
hdr.code = 0;
hdr.sid = po->num;
hdr.length = htons(skb->len);
if (!dev) if (!dev)
goto abort; goto abort;
@ -870,12 +863,17 @@ static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb)
if (skb_cow(skb, sizeof(*ph) + dev->hard_header_len)) if (skb_cow(skb, sizeof(*ph) + dev->hard_header_len))
goto abort; goto abort;
ph = (struct pppoe_hdr *) skb_push(skb, sizeof(struct pppoe_hdr)); __skb_push(skb, sizeof(*ph));
memcpy(ph, &hdr, sizeof(struct pppoe_hdr));
skb->protocol = __constant_htons(ETH_P_PPP_SES);
skb_reset_network_header(skb); skb_reset_network_header(skb);
ph = pppoe_hdr(skb);
ph->ver = 1;
ph->type = 1;
ph->code = 0;
ph->sid = po->num;
ph->length = htons(data_len);
skb->protocol = __constant_htons(ETH_P_PPP_SES);
skb->dev = dev; skb->dev = dev;
dev->hard_header(skb, dev, ETH_P_PPP_SES, dev->hard_header(skb, dev, ETH_P_PPP_SES,