提交 d3e01f71 编写于 作者: S Stephen Hemminger 提交者: David S. Miller

[ETH]: docbook comments

Add docbook style comments to ethernet support.
Signed-off-by: NStephen Hemminger <shemminger@osdl.org>
Acked-by: NRandy Dunlap <rdunlap@xenotime.net>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 e92b43a3
...@@ -64,23 +64,24 @@ ...@@ -64,23 +64,24 @@
__setup("ether=", netdev_boot_setup); __setup("ether=", netdev_boot_setup);
/* /**
* Create the Ethernet MAC header for an arbitrary protocol layer * eth_header - create the Ethernet header
* @skb: buffer to alter
* @dev: source device
* @type: Ethernet type field
* @daddr: destination address (NULL leave destination address)
* @saddr: source address (NULL use device source address)
* @len: packet length (<= skb->len)
* *
* saddr=NULL means use device source address *
* daddr=NULL means leave destination address (eg unresolved arp) * Set the protocol type. For a packet of type ETH_P_802_3 we put the length
* in here instead. It is up to the 802.2 layer to carry protocol information.
*/ */
int eth_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, int eth_header(struct sk_buff *skb, struct net_device *dev, unsigned short type,
void *daddr, void *saddr, unsigned len) void *daddr, void *saddr, unsigned len)
{ {
struct ethhdr *eth = (struct ethhdr *)skb_push(skb,ETH_HLEN); struct ethhdr *eth = (struct ethhdr *)skb_push(skb,ETH_HLEN);
/*
* Set the protocol type. For a packet of type ETH_P_802_3 we put the length
* in here instead. It is up to the 802.2 layer to carry protocol information.
*/
if(type!=ETH_P_802_3) if(type!=ETH_P_802_3)
eth->h_proto = htons(type); eth->h_proto = htons(type);
else else
...@@ -113,16 +114,16 @@ int eth_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, ...@@ -113,16 +114,16 @@ int eth_header(struct sk_buff *skb, struct net_device *dev, unsigned short type,
return -ETH_HLEN; return -ETH_HLEN;
} }
/**
/* * eth_rebuild_header- rebuild the Ethernet MAC header.
* Rebuild the Ethernet MAC header. This is called after an ARP * @skb: socket buffer to update
* (or in future other address resolution) has completed on this *
* sk_buff. We now let ARP fill in the other fields. * This is called after an ARP or IPV6 ndisc it's resolution on this
* sk_buff. We now let protocol (ARP) fill in the other fields.
* *
* This routine CANNOT use cached dst->neigh! * This routine CANNOT use cached dst->neigh!
* Really, it is used only when dst->neigh is wrong. * Really, it is used only when dst->neigh is wrong.
*/ */
int eth_rebuild_header(struct sk_buff *skb) int eth_rebuild_header(struct sk_buff *skb)
{ {
struct ethhdr *eth = (struct ethhdr *)skb->data; struct ethhdr *eth = (struct ethhdr *)skb->data;
...@@ -147,12 +148,15 @@ int eth_rebuild_header(struct sk_buff *skb) ...@@ -147,12 +148,15 @@ int eth_rebuild_header(struct sk_buff *skb)
} }
/* /**
* Determine the packet's protocol ID. The rule here is that we * eth_type_trans - determine the packet's protocol ID.
* assume 802.3 if the type field is short enough to be a length. * @skb: received socket data
* This is normal practice and works for any 'now in use' protocol. * @dev: receiving network device
*
* The rule here is that we
* assume 802.3 if the type field is short enough to be a length.
* This is normal practice and works for any 'now in use' protocol.
*/ */
__be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev) __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)
{ {
struct ethhdr *eth; struct ethhdr *eth;
...@@ -202,6 +206,11 @@ __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev) ...@@ -202,6 +206,11 @@ __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)
return htons(ETH_P_802_2); return htons(ETH_P_802_2);
} }
/**
* eth_header_parse - extract hardware address from packet
* @skb: packet to extract header from
* @haddr: destination buffer
*/
static int eth_header_parse(struct sk_buff *skb, unsigned char *haddr) static int eth_header_parse(struct sk_buff *skb, unsigned char *haddr)
{ {
struct ethhdr *eth = eth_hdr(skb); struct ethhdr *eth = eth_hdr(skb);
...@@ -209,6 +218,12 @@ static int eth_header_parse(struct sk_buff *skb, unsigned char *haddr) ...@@ -209,6 +218,12 @@ static int eth_header_parse(struct sk_buff *skb, unsigned char *haddr)
return ETH_ALEN; return ETH_ALEN;
} }
/**
* eth_header_cache - fill cache entry from neighbour
* @neigh: source neighbour
* @hh: destination cache entry
* Create an Ethernet header template from the neighbour.
*/
int eth_header_cache(struct neighbour *neigh, struct hh_cache *hh) int eth_header_cache(struct neighbour *neigh, struct hh_cache *hh)
{ {
unsigned short type = hh->hh_type; unsigned short type = hh->hh_type;
...@@ -228,10 +243,14 @@ int eth_header_cache(struct neighbour *neigh, struct hh_cache *hh) ...@@ -228,10 +243,14 @@ int eth_header_cache(struct neighbour *neigh, struct hh_cache *hh)
return 0; return 0;
} }
/* /**
* eth_header_cache_update - update cache entry
* @hh: destination cache entry
* @dev: network device
* @haddr: new hardware address
*
* Called by Address Resolution module to notify changes in address. * Called by Address Resolution module to notify changes in address.
*/ */
void eth_header_cache_update(struct hh_cache *hh, struct net_device *dev, unsigned char * haddr) void eth_header_cache_update(struct hh_cache *hh, struct net_device *dev, unsigned char * haddr)
{ {
memcpy(((u8*)hh->hh_data) + HH_DATA_OFF(sizeof(struct ethhdr)), memcpy(((u8*)hh->hh_data) + HH_DATA_OFF(sizeof(struct ethhdr)),
...@@ -240,6 +259,15 @@ void eth_header_cache_update(struct hh_cache *hh, struct net_device *dev, unsign ...@@ -240,6 +259,15 @@ void eth_header_cache_update(struct hh_cache *hh, struct net_device *dev, unsign
EXPORT_SYMBOL(eth_type_trans); EXPORT_SYMBOL(eth_type_trans);
/**
* eth_mac_addr - set new Ethernet hardware address
* @dev: network device
* @p: socket address
* Change hardware address of device.
*
* This doesn't change hardware matching, so needs to be overridden
* for most real devices.
*/
static int eth_mac_addr(struct net_device *dev, void *p) static int eth_mac_addr(struct net_device *dev, void *p)
{ {
struct sockaddr *addr=p; struct sockaddr *addr=p;
...@@ -249,6 +277,14 @@ static int eth_mac_addr(struct net_device *dev, void *p) ...@@ -249,6 +277,14 @@ static int eth_mac_addr(struct net_device *dev, void *p)
return 0; return 0;
} }
/**
* eth_change_mtu - set new MTU size
* @dev: network device
* @new_mtu: new Maximum Transfer Unit
*
* Allow changing MTU size. Needs to be overridden for devices
* supporting jumbo frames.
*/
static int eth_change_mtu(struct net_device *dev, int new_mtu) static 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)
...@@ -257,8 +293,10 @@ static int eth_change_mtu(struct net_device *dev, int new_mtu) ...@@ -257,8 +293,10 @@ static int eth_change_mtu(struct net_device *dev, int new_mtu)
return 0; return 0;
} }
/* /**
* Fill in the fields of the device structure with ethernet-generic values. * ether_setup - setup Ethernet network device
* @dev: network device
* Fill in the fields of the device structure with Ethernet-generic values.
*/ */
void ether_setup(struct net_device *dev) void ether_setup(struct net_device *dev)
{ {
...@@ -283,15 +321,15 @@ void ether_setup(struct net_device *dev) ...@@ -283,15 +321,15 @@ void ether_setup(struct net_device *dev)
EXPORT_SYMBOL(ether_setup); EXPORT_SYMBOL(ether_setup);
/** /**
* alloc_etherdev - Allocates and sets up an ethernet device * alloc_etherdev - Allocates and sets up an Ethernet device
* @sizeof_priv: Size of additional driver-private structure to be allocated * @sizeof_priv: Size of additional driver-private structure to be allocated
* for this ethernet device * for this Ethernet device
* *
* Fill in the fields of the device structure with ethernet-generic * Fill in the fields of the device structure with Ethernet-generic
* values. Basically does everything except registering the device. * values. Basically does everything except registering the device.
* *
* Constructs a new net device, complete with a private data area of * Constructs a new net device, complete with a private data area of
* size @sizeof_priv. A 32-byte (not bit) alignment is enforced for * size (sizeof_priv). A 32-byte (not bit) alignment is enforced for
* this private data area. * this private data area.
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册