static int ipgre_tunnel_init(struct net_device *dev)
{
struct net_device *tdev = NULL;
-@@ -1172,8 +1486,10 @@ static int ipgre_tunnel_init(struct net_
+@@ -1172,8 +1486,12 @@ static int ipgre_tunnel_init(struct net_
tunnel->dev = dev;
strcpy(tunnel->parms.name, dev->name);
+ if (tunnel->parms.proto_type != ETH_P_ETH) {
+ memcpy(dev->dev_addr, &tunnel->parms.iph.saddr, 4);
+ memcpy(dev->broadcast, &tunnel->parms.iph.daddr, 4);
++ } else {
++ addend += ETH_HLEN;
+ }
/* Guess output device to choose reasonable mtu and hard_header_len */