Add NGM_NAT_LIBALIAS_INFO command, that reports internal stats

of libalias instance. To be used in the mpd5 daemon.

Submitted by:	Dmitry Luhtionov <dmitryluhtionov gmail.com>
This commit is contained in:
Gleb Smirnoff 2013-03-21 08:36:15 +00:00
parent 7db07e1c85
commit 5aedfa32a4
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=248570
2 changed files with 73 additions and 0 deletions

View file

@ -145,6 +145,14 @@ static const struct ng_parse_type ng_nat_list_redirects_type = {
&ng_nat_list_redirects_fields
};
/* Parse type for struct ng_nat_libalias_info. */
static const struct ng_parse_struct_field ng_nat_libalias_info_fields[]
= NG_NAT_LIBALIAS_INFO;
static const struct ng_parse_type ng_nat_libalias_info_type = {
&ng_parse_struct_type,
&ng_nat_libalias_info_fields
};
/* List of commands and how to convert arguments to/from ASCII. */
static const struct ng_cmdlist ng_nat_cmdlist[] = {
{
@ -224,6 +232,13 @@ static const struct ng_cmdlist ng_nat_cmdlist[] = {
&ng_parse_string_type,
NULL
},
{
NGM_NAT_COOKIE,
NGM_NAT_LIBALIAS_INFO,
"libaliasinfo",
NULL,
&ng_nat_libalias_info_type
},
{ 0 }
};
@ -647,6 +662,36 @@ ng_nat_rcvmsg(node_p node, item_p item, hook_p lasthook)
error = ENOMEM;
}
break;
case NGM_NAT_LIBALIAS_INFO:
{
struct ng_nat_libalias_info *i;
NG_MKRESPONSE(resp, msg,
sizeof(struct ng_nat_libalias_info), M_NOWAIT);
if (resp == NULL) {
error = ENOMEM;
break;
}
i = (struct ng_nat_libalias_info *)resp->data;
#define COPY(F) do { \
if (priv->lib->F >= 0 && priv->lib->F < UINT32_MAX) \
i->F = priv->lib->F; \
else \
i->F = UINT32_MAX; \
} while (0)
COPY(icmpLinkCount);
COPY(udpLinkCount);
COPY(tcpLinkCount);
COPY(pptpLinkCount);
COPY(sctpLinkCount);
COPY(protoLinkCount);
COPY(fragmentIdLinkCount);
COPY(fragmentPtrLinkCount);
COPY(sockCount);
#undef COPY
}
break;
default:
error = EINVAL; /* unknown command */
break;

View file

@ -172,6 +172,33 @@ struct ng_nat_list_redirects {
{ NULL } \
}
/* Structure returned by NGM_NAT_LIBALIAS_INFO */
struct ng_nat_libalias_info {
uint32_t icmpLinkCount;
uint32_t udpLinkCount;
uint32_t tcpLinkCount;
uint32_t sctpLinkCount;
uint32_t pptpLinkCount;
uint32_t protoLinkCount;
uint32_t fragmentIdLinkCount;
uint32_t fragmentPtrLinkCount;
uint32_t sockCount;
};
/* Keep this in sync with the above structure definition */
#define NG_NAT_LIBALIAS_INFO { \
{ "icmpLinkCount", &ng_parse_uint32_type }, \
{ "udpLinkCount", &ng_parse_uint32_type }, \
{ "tcpLinkCount", &ng_parse_uint32_type }, \
{ "sctpLinkCount", &ng_parse_uint32_type }, \
{ "pptpLinkCount", &ng_parse_uint32_type }, \
{ "protoLinkCount", &ng_parse_uint32_type }, \
{ "fragmentIdLinkCount", &ng_parse_uint32_type }, \
{ "fragmentPtrLinkCount", &ng_parse_uint32_type }, \
{ "sockCount", &ng_parse_uint32_type }, \
{ NULL } \
}
enum {
NGM_NAT_SET_IPADDR = 1,
NGM_NAT_SET_MODE,
@ -184,4 +211,5 @@ enum {
NGM_NAT_ADD_SERVER,
NGM_NAT_LIST_REDIRECTS,
NGM_NAT_PROXY_RULE,
NGM_NAT_LIBALIAS_INFO,
};