mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 12:16:20 +00:00
netdev: expose ethernet address primitives
When ethernet devices are converted, the function pointer setup by eth_setup() need to be done during intialization. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
eeda3fd64f
commit
ccad637b0c
3 changed files with 14 additions and 7 deletions
|
@ -146,7 +146,7 @@ static inline int qlen(struct usb_gadget *gadget)
|
||||||
|
|
||||||
/* NETWORK DRIVER HOOKUP (to the layer above this driver) */
|
/* NETWORK DRIVER HOOKUP (to the layer above this driver) */
|
||||||
|
|
||||||
static int eth_change_mtu(struct net_device *net, int new_mtu)
|
static int ueth_change_mtu(struct net_device *net, int new_mtu)
|
||||||
{
|
{
|
||||||
struct eth_dev *dev = netdev_priv(net);
|
struct eth_dev *dev = netdev_priv(net);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -764,7 +764,7 @@ int __init gether_setup(struct usb_gadget *g, u8 ethaddr[ETH_ALEN])
|
||||||
if (ethaddr)
|
if (ethaddr)
|
||||||
memcpy(ethaddr, dev->host_mac, ETH_ALEN);
|
memcpy(ethaddr, dev->host_mac, ETH_ALEN);
|
||||||
|
|
||||||
net->change_mtu = eth_change_mtu;
|
net->change_mtu = ueth_change_mtu;
|
||||||
net->hard_start_xmit = eth_start_xmit;
|
net->hard_start_xmit = eth_start_xmit;
|
||||||
net->open = eth_open;
|
net->open = eth_open;
|
||||||
net->stop = eth_stop;
|
net->stop = eth_stop;
|
||||||
|
|
|
@ -41,6 +41,10 @@ extern int eth_header_cache(const struct neighbour *neigh, struct hh_cache *hh);
|
||||||
extern void eth_header_cache_update(struct hh_cache *hh,
|
extern void eth_header_cache_update(struct hh_cache *hh,
|
||||||
const struct net_device *dev,
|
const struct net_device *dev,
|
||||||
const unsigned char *haddr);
|
const unsigned char *haddr);
|
||||||
|
extern int eth_mac_addr(struct net_device *dev, void *p);
|
||||||
|
extern int eth_change_mtu(struct net_device *dev, int new_mtu);
|
||||||
|
extern int eth_validate_addr(struct net_device *dev);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern struct net_device *alloc_etherdev_mq(int sizeof_priv, unsigned int queue_count);
|
extern struct net_device *alloc_etherdev_mq(int sizeof_priv, unsigned int queue_count);
|
||||||
|
|
|
@ -282,7 +282,7 @@ EXPORT_SYMBOL(eth_header_cache_update);
|
||||||
* This doesn't change hardware matching, so needs to be overridden
|
* This doesn't change hardware matching, so needs to be overridden
|
||||||
* for most real devices.
|
* for most real devices.
|
||||||
*/
|
*/
|
||||||
static int eth_mac_addr(struct net_device *dev, void *p)
|
int eth_mac_addr(struct net_device *dev, void *p)
|
||||||
{
|
{
|
||||||
struct sockaddr *addr = p;
|
struct sockaddr *addr = p;
|
||||||
|
|
||||||
|
@ -293,6 +293,7 @@ static int eth_mac_addr(struct net_device *dev, void *p)
|
||||||
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
|
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(eth_mac_addr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* eth_change_mtu - set new MTU size
|
* eth_change_mtu - set new MTU size
|
||||||
|
@ -302,21 +303,23 @@ static int eth_mac_addr(struct net_device *dev, void *p)
|
||||||
* Allow changing MTU size. Needs to be overridden for devices
|
* Allow changing MTU size. Needs to be overridden for devices
|
||||||
* supporting jumbo frames.
|
* supporting jumbo frames.
|
||||||
*/
|
*/
|
||||||
static int eth_change_mtu(struct net_device *dev, int new_mtu)
|
int eth_change_mtu(struct net_device *dev, int new_mtu)
|
||||||
{
|
{
|
||||||
if (new_mtu < 68 || new_mtu > ETH_DATA_LEN)
|
if (new_mtu < 68 || new_mtu > ETH_DATA_LEN)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
dev->mtu = new_mtu;
|
dev->mtu = new_mtu;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(eth_change_mtu);
|
||||||
|
|
||||||
static int eth_validate_addr(struct net_device *dev)
|
int eth_validate_addr(struct net_device *dev)
|
||||||
{
|
{
|
||||||
if (!is_valid_ether_addr(dev->dev_addr))
|
if (!is_valid_ether_addr(dev->dev_addr))
|
||||||
return -EADDRNOTAVAIL;
|
return -EADDRNOTAVAIL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(eth_validate_addr);
|
||||||
|
|
||||||
const struct header_ops eth_header_ops ____cacheline_aligned = {
|
const struct header_ops eth_header_ops ____cacheline_aligned = {
|
||||||
.create = eth_header,
|
.create = eth_header,
|
||||||
|
@ -334,11 +337,11 @@ const struct header_ops eth_header_ops ____cacheline_aligned = {
|
||||||
void ether_setup(struct net_device *dev)
|
void ether_setup(struct net_device *dev)
|
||||||
{
|
{
|
||||||
dev->header_ops = ð_header_ops;
|
dev->header_ops = ð_header_ops;
|
||||||
|
#ifdef CONFIG_COMPAT_NET_DEV_OPS
|
||||||
dev->change_mtu = eth_change_mtu;
|
dev->change_mtu = eth_change_mtu;
|
||||||
dev->set_mac_address = eth_mac_addr;
|
dev->set_mac_address = eth_mac_addr;
|
||||||
dev->validate_addr = eth_validate_addr;
|
dev->validate_addr = eth_validate_addr;
|
||||||
|
#endif
|
||||||
dev->type = ARPHRD_ETHER;
|
dev->type = ARPHRD_ETHER;
|
||||||
dev->hard_header_len = ETH_HLEN;
|
dev->hard_header_len = ETH_HLEN;
|
||||||
dev->mtu = ETH_DATA_LEN;
|
dev->mtu = ETH_DATA_LEN;
|
||||||
|
|
Loading…
Reference in a new issue