forked from mirrors/linux
		
	Revert "gre: Fix IPv6 link-local address generation."
This reverts commit183185a18f. This patch broke net/forwarding/ip6gre_custom_multipath_hash.sh in some circumstances (https://lore.kernel.org/netdev/Z9RIyKZDNoka53EO@mini-arch/). Let's revert it while the problem is being investigated. Fixes:183185a18f("gre: Fix IPv6 link-local address generation.") Signed-off-by: Guillaume Nault <gnault@redhat.com> Link: https://patch.msgid.link/8b1ce738eb15dd841aab9ef888640cab4f6ccfea.1742418408.git.gnault@redhat.com Acked-by: Stanislav Fomichev <sdf@fomichev.me> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
		
							parent
							
								
									355d940f4d
								
							
						
					
					
						commit
						fc486c2d06
					
				
					 1 changed files with 6 additions and 9 deletions
				
			
		|  | @ -3209,13 +3209,16 @@ static void add_v4_addrs(struct inet6_dev *idev) | ||||||
| 	struct in6_addr addr; | 	struct in6_addr addr; | ||||||
| 	struct net_device *dev; | 	struct net_device *dev; | ||||||
| 	struct net *net = dev_net(idev->dev); | 	struct net *net = dev_net(idev->dev); | ||||||
| 	int scope, plen; | 	int scope, plen, offset = 0; | ||||||
| 	u32 pflags = 0; | 	u32 pflags = 0; | ||||||
| 
 | 
 | ||||||
| 	ASSERT_RTNL(); | 	ASSERT_RTNL(); | ||||||
| 
 | 
 | ||||||
| 	memset(&addr, 0, sizeof(struct in6_addr)); | 	memset(&addr, 0, sizeof(struct in6_addr)); | ||||||
| 	memcpy(&addr.s6_addr32[3], idev->dev->dev_addr, 4); | 	/* in case of IP6GRE the dev_addr is an IPv6 and therefore we use only the last 4 bytes */ | ||||||
|  | 	if (idev->dev->addr_len == sizeof(struct in6_addr)) | ||||||
|  | 		offset = sizeof(struct in6_addr) - 4; | ||||||
|  | 	memcpy(&addr.s6_addr32[3], idev->dev->dev_addr + offset, 4); | ||||||
| 
 | 
 | ||||||
| 	if (!(idev->dev->flags & IFF_POINTOPOINT) && idev->dev->type == ARPHRD_SIT) { | 	if (!(idev->dev->flags & IFF_POINTOPOINT) && idev->dev->type == ARPHRD_SIT) { | ||||||
| 		scope = IPV6_ADDR_COMPATv4; | 		scope = IPV6_ADDR_COMPATv4; | ||||||
|  | @ -3526,13 +3529,7 @@ static void addrconf_gre_config(struct net_device *dev) | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* Generate the IPv6 link-local address using addrconf_addr_gen(),
 | 	if (dev->type == ARPHRD_ETHER) { | ||||||
| 	 * unless we have an IPv4 GRE device not bound to an IP address and |  | ||||||
| 	 * which is in EUI64 mode (as __ipv6_isatap_ifid() would fail in this |  | ||||||
| 	 * case). Such devices fall back to add_v4_addrs() instead. |  | ||||||
| 	 */ |  | ||||||
| 	if (!(dev->type == ARPHRD_IPGRE && *(__be32 *)dev->dev_addr == 0 && |  | ||||||
| 	      idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_EUI64)) { |  | ||||||
| 		addrconf_addr_gen(idev, true); | 		addrconf_addr_gen(idev, true); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Guillaume Nault
						Guillaume Nault