/* up to sizeof(pkt->soft) has already been copied from the card */
memcpy(pkt, pkthdr, sizeof(struct archdr)); if (length > sizeof(pkt->soft))
lp->hw.copy_from_card(dev, bufnum, ofs + sizeof(pkt->soft),
pkt->soft.raw + sizeof(pkt->soft),
length - sizeof(pkt->soft));
if (BUGLVL(D_SKB))
arcnet_dump_skb(dev, skb, "rx");
/* Create the ARCnet hard/soft headers for raw mode. *Therearen'tanysoftheadersinrawmode-noteventheprotocolid.
*/ staticint build_header(struct sk_buff *skb, struct net_device *dev, unsignedshort type, uint8_t daddr)
{ int hdr_size = ARC_HDR_SIZE; struct archdr *pkt = skb_push(skb, hdr_size);
/* Set the source hardware address. * *Thisisprettypointlessformostpurposes,butitcanhelpin *debugging.ARCnetdoesnotallowustochangethesourceaddress *intheactualpacketsent.
*/
pkt->hard.source = *dev->dev_addr;
/* see linux/net/ethernet/eth.c to see where I got the following */
if (dev->flags & (IFF_LOOPBACK | IFF_NOARP)) { /* FIXME: fill in the last byte of the dest ipaddr here *tobettercomplywithRFC1051in"noarp"mode.
*/
pkt->hard.dest = 0; return hdr_size;
} /* otherwise, just fill it in and go! */
pkt->hard.dest = daddr;
return hdr_size; /* success */
}
staticint prepare_tx(struct net_device *dev, struct archdr *pkt, int length, int bufnum)
{ struct arcnet_local *lp = netdev_priv(dev); struct arc_hardware *hard = &pkt->hard; int ofs;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.