From: Pascal H. <pa...@pl...> - 2011-08-03 20:23:07
|
Routed encapsulation requires less headroom than bridged encapsulation. Signed-off-by: Pascal Hambourg <pa...@pl...> --- net/atm/br2684.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff -uprN a/net/atm/br2684.c b/net/atm/br2684.c --- a/net/atm/br2684.c 2011-08-02 20:21:22.000000000 +0200 +++ b/net/atm/br2684.c 2011-08-02 20:21:23.000000000 +0200 @@ -202,7 +202,10 @@ static int br2684_xmit_vcc(struct sk_buf { struct br2684_dev *brdev = BRPRIV(dev); struct atm_vcc *atmvcc; - int minheadroom = (brvcc->encaps == e_llc) ? 10 : 2; + int minheadroom = (brvcc->encaps == e_llc) ? + ((brdev->payload == p_bridged) ? + sizeof(llc_oui_pid_pad) : sizeof(llc_oui_ipv4)) : + ((brdev->payload == p_bridged) ? BR2684_PAD_LEN : 0); if (skb_headroom(skb) < minheadroom) { struct sk_buff *skb2 = skb_realloc_headroom(skb, minheadroom); |
From: Pascal H. <pa...@pl...> - 2011-08-17 06:37:28
|
Routed payload requires less headroom than bridged payload. So do not reallocate headroom if not needed. Also, add worst case AAL5 overhead to netdev->hard_header_len. Signed-off-by: Pascal Hambourg <pa...@pl...> --- net/atm/br2684.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff -uprN a/net/atm/br2684.c b/net/atm/br2684.c --- a/net/atm/br2684.c 2011-08-12 21:29:22.000000000 +0200 +++ b/net/atm/br2684.c 2011-08-16 22:13:47.000000000 +0200 @@ -202,7 +202,10 @@ static int br2684_xmit_vcc(struct sk_buf { struct br2684_dev *brdev = BRPRIV(dev); struct atm_vcc *atmvcc; - int minheadroom = (brvcc->encaps == e_llc) ? 10 : 2; + int minheadroom = (brvcc->encaps == e_llc) ? + ((brdev->payload == p_bridged) ? + sizeof(llc_oui_pid_pad) : sizeof(llc_oui_ipv4)) : + ((brdev->payload == p_bridged) ? BR2684_PAD_LEN : 0); if (skb_headroom(skb) < minheadroom) { struct sk_buff *skb2 = skb_realloc_headroom(skb, minheadroom); @@ -610,6 +613,7 @@ static void br2684_setup(struct net_devi struct br2684_dev *brdev = BRPRIV(netdev); ether_setup(netdev); + netdev->hard_header_len += sizeof(llc_oui_pid_pad); /* worst case */ brdev->net_dev = netdev; netdev->netdev_ops = &br2684_netdev_ops; @@ -622,7 +626,7 @@ static void br2684_setup_routed(struct n struct br2684_dev *brdev = BRPRIV(netdev); brdev->net_dev = netdev; - netdev->hard_header_len = 0; + netdev->hard_header_len = sizeof(llc_oui_ipv4); /* worst case */ netdev->netdev_ops = &br2684_netdev_ops_routed; netdev->addr_len = 0; netdev->mtu = 1500; |