+@@ -1172,8 +1486,10 @@ static int ipgre_tunnel_init(struct net_
+ tunnel->dev = dev;
+ strcpy(tunnel->parms.name, dev->name);
+
+- memcpy(dev->dev_addr, &tunnel->parms.iph.saddr, 4);
+- memcpy(dev->broadcast, &tunnel->parms.iph.daddr, 4);
++ 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);
++ }
+
+ /* Guess output device to choose reasonable mtu and hard_header_len */
+
+@@ -1191,7 +1507,14 @@ static int ipgre_tunnel_init(struct net_