Commit 061af250 authored by Chas Williams's avatar Chas Williams Committed by David S. Miller

[ATM]: Get minimum frame size right in lec.c

parent 97d10a80
...@@ -223,7 +223,8 @@ lec_send_packet(struct sk_buff *skb, struct net_device *dev) ...@@ -223,7 +223,8 @@ lec_send_packet(struct sk_buff *skb, struct net_device *dev)
struct lecdatahdr_8023 *lec_h; struct lecdatahdr_8023 *lec_h;
struct atm_vcc *send_vcc; struct atm_vcc *send_vcc;
struct lec_arp_table *entry; struct lec_arp_table *entry;
unsigned char *nb, *dst; unsigned char *dst;
int min_frame_size;
#ifdef CONFIG_TR #ifdef CONFIG_TR
unsigned char rdesc[ETH_ALEN]; /* Token Ring route descriptor */ unsigned char rdesc[ETH_ALEN]; /* Token Ring route descriptor */
#endif #endif
...@@ -294,26 +295,24 @@ lec_send_packet(struct sk_buff *skb, struct net_device *dev) ...@@ -294,26 +295,24 @@ lec_send_packet(struct sk_buff *skb, struct net_device *dev)
#endif /* DUMP_PACKETS > 0 */ #endif /* DUMP_PACKETS > 0 */
/* Minimum ethernet-frame size */ /* Minimum ethernet-frame size */
if (skb->len <62) { #ifdef CONFIG_TR
if (skb->truesize < 62) { if (priv->is_trdev)
printk("%s:data packet %d / %d\n", min_frame_size = LEC_MINIMUM_8025_SIZE;
dev->name, else
skb->len,skb->truesize); #endif
nb=(unsigned char*)kmalloc(64, GFP_ATOMIC); min_frame_size = LEC_MINIMUM_8023_SIZE;
if (nb == NULL) { if (skb->len < min_frame_size) {
if (skb->truesize < min_frame_size) {
skb2 = skb_copy_expand(skb, 0,
min_frame_size - skb->truesize, GFP_ATOMIC);
dev_kfree_skb(skb); dev_kfree_skb(skb);
if (skb2 == NULL) {
priv->stats.tx_dropped++;
return 0; return 0;
} }
memcpy(nb,skb->data,skb->len); skb = skb2;
kfree(skb->head);
skb->head = skb->data = nb;
skb->tail = nb+62;
skb->end = nb+64;
skb->len=62;
skb->truesize = 64;
} else {
skb->len = 62;
} }
skb_put(skb, min_frame_size - skb->len);
} }
/* Send to right vcc */ /* Send to right vcc */
......
...@@ -38,6 +38,9 @@ struct lecdatahdr_8025 { ...@@ -38,6 +38,9 @@ struct lecdatahdr_8025 {
unsigned char h_source[ETH_ALEN]; unsigned char h_source[ETH_ALEN];
}; };
#define LEC_MINIMUM_8023_SIZE 62
#define LEC_MINIMUM_8025_SIZE 16
/* /*
* Operations that LANE2 capable device can do. Two first functions * Operations that LANE2 capable device can do. Two first functions
* are used to make the device do things. See spec 3.1.3 and 3.1.4. * are used to make the device do things. See spec 3.1.3 and 3.1.4.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment