mirror of
				https://git.proxmox.com/git/mirror_iproute2
				synced 2025-10-31 21:10:30 +00:00 
			
		
		
		
	 ca697cee4c
			
		
	
	
		ca697cee4c
		
	
	
	
	
		
			
			Add a new parameter '-Numeric' to show the number of protocol, scope, dsfield, etc directly instead of converting it to human readable name. Do the same on tc and ss. This patch is based on David Ahern's previous patch. Suggested-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Signed-off-by: David Ahern <dsahern@gmail.com>
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * inet_proto.c
 | |
|  *
 | |
|  *		This program is free software; you can redistribute it and/or
 | |
|  *		modify it under the terms of the GNU General Public License
 | |
|  *		as published by the Free Software Foundation; either version
 | |
|  *		2 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * Authors:	Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <unistd.h>
 | |
| #include <fcntl.h>
 | |
| #include <sys/socket.h>
 | |
| #include <netinet/in.h>
 | |
| #include <netdb.h>
 | |
| #include <string.h>
 | |
| 
 | |
| #include "rt_names.h"
 | |
| #include "utils.h"
 | |
| 
 | |
| const char *inet_proto_n2a(int proto, char *buf, int len)
 | |
| {
 | |
| 	static char *ncache;
 | |
| 	static int icache = -1;
 | |
| 	struct protoent *pe;
 | |
| 
 | |
| 	if (proto == icache)
 | |
| 		return ncache;
 | |
| 
 | |
| 	pe = getprotobynumber(proto);
 | |
| 	if (pe && !numeric) {
 | |
| 		if (icache != -1)
 | |
| 			free(ncache);
 | |
| 		icache = proto;
 | |
| 		ncache = strdup(pe->p_name);
 | |
| 		strlcpy(buf, pe->p_name, len);
 | |
| 		return buf;
 | |
| 	}
 | |
| 	snprintf(buf, len, "ipproto-%d", proto);
 | |
| 	return buf;
 | |
| }
 | |
| 
 | |
| int inet_proto_a2n(const char *buf)
 | |
| {
 | |
| 	static char *ncache;
 | |
| 	static int icache = -1;
 | |
| 	struct protoent *pe;
 | |
| 	__u8 ret;
 | |
| 
 | |
| 	if (icache != -1 && strcmp(ncache, buf) == 0)
 | |
| 		return icache;
 | |
| 
 | |
| 	if (!get_u8(&ret, buf, 10))
 | |
| 		return ret;
 | |
| 
 | |
| 	pe = getprotobyname(buf);
 | |
| 	if (pe) {
 | |
| 		if (icache != -1)
 | |
| 			free(ncache);
 | |
| 		icache = pe->p_proto;
 | |
| 		ncache = strdup(pe->p_name);
 | |
| 		return pe->p_proto;
 | |
| 	}
 | |
| 	return -1;
 | |
| }
 |