On Thu, 2006-23-02 at 17:41 +0300, Alexey Kuznetsov wrote: > After some thinking I suspect the deletion of this chunk could change > behaviour > of some parts which do not use neighbour cache f.e. packet socket. >
Thanks Alexey, this was what i was worried about ;-> > > I think safer approach would be to move this chunk after if (daddr). > And the possibility to remove this completely could be analyzed later. > Ok, patch attached. Dave this also is needed for 2.6.16-rcXX. Tested against a standard eth device (e1000) and tuntap. cheers, jamal
For ethernet-like netdevices, dont overwritte first packet's dst MAC address when it is already resolved Signed-off-by: Jamal Hadi Salim <[EMAIL PROTECTED]> --- diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 9890fd9..c971f14 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -95,6 +95,12 @@ int eth_header(struct sk_buff *skb, stru saddr = dev->dev_addr; memcpy(eth->h_source,saddr,dev->addr_len); + if(daddr) + { + memcpy(eth->h_dest,daddr,dev->addr_len); + return ETH_HLEN; + } + /* * Anyway, the loopback-device should never use this function... */ @@ -105,12 +111,6 @@ int eth_header(struct sk_buff *skb, stru return ETH_HLEN; } - if(daddr) - { - memcpy(eth->h_dest,daddr,dev->addr_len); - return ETH_HLEN; - } - return -ETH_HLEN; }