original files of m241
This commit is contained in:
@@ -0,0 +1,321 @@
|
||||
/*
|
||||
******************************************************************************
|
||||
* SOURCE FILE
|
||||
*
|
||||
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: iplite_cmd_netstat.c,v $ $Revision: 1.21 $
|
||||
* $Source: /home/interpeak/CVSRoot/iplite2/src/iplite_cmd_netstat.c,v $
|
||||
* $Author: kenneth $
|
||||
* $State: Exp $ $Locker: $
|
||||
*
|
||||
* INTERPEAK_COPYRIGHT_STRING
|
||||
* Design and implementation by Kenneth Jonsson <kenneth@interpeak.se>
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 1 DESCRIPTION
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 2 CONFIGURATION
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef IPCOM_KERNEL
|
||||
#define IPCOM_KERNEL
|
||||
#endif
|
||||
#include "iplite_config.h"
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 3 INCLUDE FILES
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
#define IPCOM_USE_CLIB_PROTO
|
||||
#include <ipcom_clib.h>
|
||||
#include <ipcom_cmd.h>
|
||||
#include <ipcom_getopt.h>
|
||||
#include <ipcom_sock.h>
|
||||
|
||||
#include "iplite_cmd.h"
|
||||
#include "iplite.h"
|
||||
#include "iplite_h.h"
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 4 DEFINES
|
||||
****************************************************************************
|
||||
*/
|
||||
#define IPLITE_NETSTAT_STRLEN 256
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 5 TYPES
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 6 EXTERN PROTOTYPES
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 7 LOCAL PROTOTYPES
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
IP_PUBLIC int iplite_cmd_netstat(int argc, char **argv);
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 8 DATA
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
IP_STATIC Iplite_cmd_int_str_map af_map[] =
|
||||
{
|
||||
{ IP_AF_INET, "INET" },
|
||||
{ IP_AF_INET6, "INET6" },
|
||||
{ -1, IP_NULL }
|
||||
};
|
||||
|
||||
IP_STATIC Iplite_cmd_int_str_map proto_map[] =
|
||||
{
|
||||
{ IP_IPPROTO_TCP, "TCP" },
|
||||
{ IP_IPPROTO_UDP, "UDP" },
|
||||
{ IP_IPPROTO_ICMP, "ICMP" },
|
||||
{ IP_IPPROTO_ICMPV6, "ICMP6" },
|
||||
{ IP_IPPROTO_IP, "IP" },
|
||||
{ IP_IPPROTO_IPV4, "IPv4" },
|
||||
{ IP_IPPROTO_IPV6, "IPv6" },
|
||||
{ -1, IP_NULL }
|
||||
};
|
||||
|
||||
#ifdef IPCOM_USE_TCP
|
||||
IP_STATIC IP_CONST char *tcp_state_list[] =
|
||||
{
|
||||
"",
|
||||
"CLOSED",
|
||||
"LISTEN",
|
||||
"SYN_SENT",
|
||||
"SYN_RCVD",
|
||||
"ESTABLISHED",
|
||||
"CLOSE_WAIT",
|
||||
"FIN_WAIT_1",
|
||||
"CLOSING",
|
||||
"LAST_ACK",
|
||||
"FIN_WAIT_2",
|
||||
"TIME_WAIT"
|
||||
};
|
||||
#endif /* IPCOM_USE_TCP */
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 9 LOCAL FUNCTIONS
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*===========================================================================
|
||||
* iplite_netstat_print_entries
|
||||
*===========================================================================
|
||||
* Description: Prints the status of IPLITE sockets.
|
||||
* Parameters: af - The address family to print status for or -1 for all
|
||||
* address family types.
|
||||
* proto - The protocol to print status for or -1 for all
|
||||
* protocols.
|
||||
* show_unconnected - IP_TRUE if both connected and unconnected
|
||||
* sockets status should be printed.
|
||||
* no_dns - IP_TRUE if the addresses should not be resolved to
|
||||
* there DNS names.
|
||||
* Returns:
|
||||
*
|
||||
*/
|
||||
IP_STATIC void
|
||||
iplite_netstat_print_entries(int af, int proto, Ip_bool show_unconnected, Ip_bool no_dns)
|
||||
{
|
||||
int p, x, a, y;
|
||||
char str[IPLITE_NETSTAT_STRLEN];
|
||||
struct Iplite_tag_sock_data tag;
|
||||
int ret;
|
||||
Ip_u16 dport;
|
||||
|
||||
for (y = 0; af_map[y].key != -1; y++)
|
||||
{
|
||||
if (af != 0)
|
||||
a = af;
|
||||
else
|
||||
a = af_map[y].key;
|
||||
ipcom_printf("%s sockets\n", iplite_cmd_key_to_str(af_map, a));
|
||||
ipcom_printf("%-6s%-4s%-30s%-30s%-5s\n",
|
||||
"Prot", "Fd", "Local Address", "Foreign Address", "State");
|
||||
|
||||
for (x = 0; proto_map[x].key != -1; x++)
|
||||
{
|
||||
if (proto != -1)
|
||||
p = proto;
|
||||
else
|
||||
p = proto_map[x].key;
|
||||
|
||||
tag.hdr.type = IPLITE_CTRL_NEW_ENUM_SOCK_DATA;
|
||||
tag.hdr.size = sizeof(tag);
|
||||
for (;;)
|
||||
{
|
||||
ret = iplite_ctrl(&tag.hdr);
|
||||
if (ret == IPLITE_CTRL_ENUM_DONE)
|
||||
break;
|
||||
if (ret < 0)
|
||||
{
|
||||
ipcom_printf("iplite_ctrl() failed (%d)\n", -ret);
|
||||
return;
|
||||
}
|
||||
tag.hdr.type = IPLITE_CTRL_CONT_ENUM_SOCK_DATA;
|
||||
|
||||
if (tag.protocol != p || tag.domain != a)
|
||||
continue;
|
||||
|
||||
dport = ip_ntohs(((struct Ip_sockaddr_in *) &tag.daddr)->sin_port);
|
||||
if (!show_unconnected && dport == 0)
|
||||
/* Show only connected sockets */
|
||||
continue;
|
||||
|
||||
ipcom_printf("%-6s", iplite_cmd_key_to_str(proto_map, tag.protocol));
|
||||
ipcom_printf("%-4d", tag.fd);
|
||||
ipcom_printf("%-30s",
|
||||
ipcom_cmd_sockaddr_to_str(&tag.saddr.addr, IP_TRUE, no_dns, str, sizeof(str)));
|
||||
ipcom_printf("%-30s",
|
||||
ipcom_cmd_sockaddr_to_str(&tag.daddr.addr, IP_TRUE, no_dns, str, sizeof(str)));
|
||||
|
||||
#ifdef IPCOM_USE_TCP
|
||||
if (tag.protocol == IP_IPPROTO_TCP)
|
||||
ipcom_printf("%-11s", tcp_state_list[tag.tcp_state]);
|
||||
|
||||
#endif /* IPCOM_USE_TCP */
|
||||
ipcom_printf("\n");
|
||||
}
|
||||
|
||||
if (proto != -1)
|
||||
break;
|
||||
}
|
||||
ipcom_printf("\n");
|
||||
if (af != -1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 10 PUBLIC FUNCTIONS
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
*===========================================================================
|
||||
* iplite_cmd_netstat
|
||||
*===========================================================================
|
||||
* Description:
|
||||
* Parameters:
|
||||
* Returns:
|
||||
*
|
||||
*/
|
||||
IP_PUBLIC int
|
||||
iplite_cmd_netstat(int argc, char **argv)
|
||||
{
|
||||
int i, c;
|
||||
int proto = -1;
|
||||
int af = 0;
|
||||
Ip_bool show_unconnected = IP_FALSE;
|
||||
Ip_bool no_dns = IP_FALSE;
|
||||
Ipcom_getopt opt;
|
||||
|
||||
ipcom_getopt_clear_r(&opt);
|
||||
while ((c = ipcom_getopt_r(argc, argv, "?hHaf:p:nV:", &opt)) != -1)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '?':
|
||||
case 'h':
|
||||
case 'H':
|
||||
goto usage;
|
||||
case 'a':
|
||||
show_unconnected = IP_TRUE;
|
||||
break;
|
||||
case 'f':
|
||||
for (i = 0; af_map[i].key != -1; i++)
|
||||
if (ipcom_strcasecmp(opt.optarg, af_map[i].str) == 0)
|
||||
{
|
||||
af = af_map[i].key;
|
||||
break;
|
||||
}
|
||||
if (af_map[i].key == -1)
|
||||
goto usage;
|
||||
break;
|
||||
case 'p':
|
||||
for (i = 0; proto_map[i].key != -1; i++)
|
||||
if (ipcom_strcasecmp(opt.optarg, proto_map[i].str) == 0)
|
||||
{
|
||||
proto = proto_map[i].key;
|
||||
break;
|
||||
}
|
||||
if (proto_map[i].key == -1)
|
||||
goto usage;
|
||||
break;
|
||||
case 'n':
|
||||
no_dns = IP_TRUE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
iplite_netstat_print_entries(af, proto, show_unconnected, no_dns);
|
||||
|
||||
return 0;
|
||||
|
||||
usage:
|
||||
ipcom_printf("\n"
|
||||
"NAME\n"
|
||||
" netstat - show network status\n"
|
||||
"\n"
|
||||
"SYNOPSIS\n");
|
||||
ipcom_printf(" netstat [-anh] [-f address_family] [-p protocol]\n"
|
||||
"\n"
|
||||
"DESCRIPTION\n"
|
||||
" The netstat program displays and modifies the Internet-to-Ethernet address\n"
|
||||
" translation tables used by the address resolution protocol.\n"
|
||||
"\n");
|
||||
ipcom_printf(" -a Show the state of all sockets; normally sockets used by server\n"
|
||||
" processes are not shown.\n"
|
||||
" -f address_family\n"
|
||||
" Limit statistics or address control block reports to those of the\n"
|
||||
" specified address family. The following address families are\n"
|
||||
" recognized: inet for IPv4 (default) and inet6 for IPv6\n");
|
||||
ipcom_printf(" -h Help, this usage menu\n"
|
||||
" -n Show network addresses as numbers. Default is to lookup symbolic\n"
|
||||
" names for the addresses.\n"
|
||||
" -p protocol\n"
|
||||
" Show statistics about protocol, which is either a well-known name\n"
|
||||
" for a protocol or an alias for it.\n"
|
||||
"\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* END OF FILE
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user