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

Commit 0c4e8581 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller
Browse files

[NET]: Wrap netdevice hardware header creation.



Add inline for common usage of hardware header creation, and
fix bug in IPV6 mcast where the assumption about negative return is
an errno. Negative return from hard_header means not enough space
was available,(ie -N bytes).

Signed-off-by: default avatarStephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4c94f8c0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -286,7 +286,7 @@ static int bpq_xmit(struct sk_buff *skb, struct net_device *dev)

	skb->protocol = ax25_type_trans(skb, dev);
	skb_reset_network_header(skb);
	dev->hard_header(skb, dev, ETH_P_BPQ, bpq->dest_addr, NULL, 0);
	dev_hard_header(skb, dev, ETH_P_BPQ, bpq->dest_addr, NULL, 0);
	bpq->stats.tx_packets++;
	bpq->stats.tx_bytes+=skb->len;
  
+2 −2
Original line number Diff line number Diff line
@@ -170,7 +170,7 @@ static int macvlan_hard_header(struct sk_buff *skb, struct net_device *dev,
	const struct macvlan_dev *vlan = netdev_priv(dev);
	struct net_device *lowerdev = vlan->lowerdev;

	return lowerdev->hard_header(skb, lowerdev, type, daddr,
	return dev_hard_header(skb, lowerdev, type, daddr,
			       saddr ? : dev->dev_addr, len);
}

+4 −4
Original line number Diff line number Diff line
@@ -834,7 +834,7 @@ static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock,
	}

	error = total_len;
	dev->hard_header(skb, dev, ETH_P_PPP_SES,
	dev_hard_header(skb, dev, ETH_P_PPP_SES,
			po->pppoe_pa.remote, NULL, total_len);

	memcpy(ph, &hdr, sizeof(struct pppoe_hdr));
@@ -886,7 +886,7 @@ static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb)
	skb->protocol = __constant_htons(ETH_P_PPP_SES);
	skb->dev = dev;

	dev->hard_header(skb, dev, ETH_P_PPP_SES,
	dev_hard_header(skb, dev, ETH_P_PPP_SES,
			po->pppoe_pa.remote, NULL, data_len);

	dev_queue_xmit(skb);
+1 −1
Original line number Diff line number Diff line
@@ -216,7 +216,7 @@ static void lapbeth_data_transmit(struct net_device *ndev, struct sk_buff *skb)

	skb->dev = dev = lapbeth->ethdev;

	dev->hard_header(skb, dev, ETH_P_DEC, bcast_addr, NULL, 0);
	dev_hard_header(skb, dev, ETH_P_DEC, bcast_addr, NULL, 0);

	dev_queue_xmit(skb);
}
+9 −0
Original line number Diff line number Diff line
@@ -800,6 +800,15 @@ extern int dev_restart(struct net_device *dev);
extern int		netpoll_trap(void);
#endif

static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev,
				  unsigned short type,
				  void *daddr, void *saddr, unsigned len)
{
	if (!dev->hard_header)
		return 0;
	return dev->hard_header(skb, dev, type, daddr, saddr, len);
}

typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len);
extern int		register_gifconf(unsigned int family, gifconf_func_t * gifconf);
static inline int unregister_gifconf(unsigned int family)
Loading