forked from mirrors/linux
		
	net: Fix routing tables with id > 255 for legacy software
Most legacy software do not like tables > 255 as rtm_table is u8 so tb_id is sent &0xff and it is possible to mismatch for example table 510 with table 254 (main). This patch introduces RT_TABLE_COMPAT=252 so the code uses it if tb_id > 255. It makes such old applications happy, new ones are still able to use RTA_TABLE to get a proper table id. Signed-off-by: Krzysztof Piotr Oledzki <ole@ans.pl> Acked-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									99c6f60e72
								
							
						
					
					
						commit
						709772e6e0
					
				
					 2 changed files with 5 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -246,6 +246,7 @@ enum rt_class_t
 | 
			
		|||
{
 | 
			
		||||
	RT_TABLE_UNSPEC=0,
 | 
			
		||||
/* User defined values */
 | 
			
		||||
	RT_TABLE_COMPAT=252,
 | 
			
		||||
	RT_TABLE_DEFAULT=253,
 | 
			
		||||
	RT_TABLE_MAIN=254,
 | 
			
		||||
	RT_TABLE_LOCAL=255,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -960,7 +960,10 @@ int fib_dump_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
 | 
			
		|||
	rtm->rtm_dst_len = dst_len;
 | 
			
		||||
	rtm->rtm_src_len = 0;
 | 
			
		||||
	rtm->rtm_tos = tos;
 | 
			
		||||
	rtm->rtm_table = tb_id;
 | 
			
		||||
	if (tb_id < 256)
 | 
			
		||||
		rtm->rtm_table = tb_id;
 | 
			
		||||
	else
 | 
			
		||||
		rtm->rtm_table = RT_TABLE_COMPAT;
 | 
			
		||||
	NLA_PUT_U32(skb, RTA_TABLE, tb_id);
 | 
			
		||||
	rtm->rtm_type = type;
 | 
			
		||||
	rtm->rtm_flags = fi->fib_flags;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue