mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-18 15:30:21 +00:00
In ng_socket(4) expose less kernel internals to userland. This commit
breaks ABI, but makes probability of ABI breakage in future less.
This commit is contained in:
parent
c4282b741b
commit
4b2b8a370c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=230481
@ -162,6 +162,19 @@ static struct mtx ngsocketlist_mtx;
|
||||
#define TRAP_ERROR
|
||||
#endif
|
||||
|
||||
/* Per-node private data */
|
||||
struct ngsock {
|
||||
struct ng_node *node; /* the associated netgraph node */
|
||||
struct ngpcb *datasock; /* optional data socket */
|
||||
struct ngpcb *ctlsock; /* optional control socket */
|
||||
int flags;
|
||||
int refs;
|
||||
struct mtx mtx; /* mtx to wait on */
|
||||
int error; /* place to store error */
|
||||
};
|
||||
|
||||
#define NGS_FLAG_NOLINGER 1 /* close with last hook */
|
||||
|
||||
/***************************************************************
|
||||
Control sockets
|
||||
***************************************************************/
|
||||
@ -535,9 +548,7 @@ ng_attach_cntl(struct socket *so)
|
||||
pcbp->sockdata = priv;
|
||||
priv->refs++;
|
||||
priv->node = node;
|
||||
|
||||
/* Store a hint for netstat(1). */
|
||||
priv->node_id = priv->node->nd_ID;
|
||||
pcbp->node_id = node->nd_ID; /* hint for netstat(1) */
|
||||
|
||||
/* Link the node and the private data. */
|
||||
NG_NODE_SET_PRIVATE(priv->node, priv);
|
||||
@ -608,6 +619,7 @@ ng_detach_common(struct ngpcb *pcbp, int which)
|
||||
panic("%s", __func__);
|
||||
}
|
||||
pcbp->sockdata = NULL;
|
||||
pcbp->node_id = 0;
|
||||
|
||||
ng_socket_free_priv(priv);
|
||||
}
|
||||
@ -698,6 +710,7 @@ ng_connect_data(struct sockaddr *nam, struct ngpcb *pcbp)
|
||||
mtx_lock(&priv->mtx);
|
||||
priv->datasock = pcbp;
|
||||
pcbp->sockdata = priv;
|
||||
pcbp->node_id = priv->node->nd_ID; /* hint for netstat(1) */
|
||||
priv->refs++;
|
||||
mtx_unlock(&priv->mtx);
|
||||
NG_FREE_ITEM(item); /* drop the reference to the node */
|
||||
|
@ -50,20 +50,6 @@ struct ngpcb {
|
||||
struct ngsock *sockdata; /* netgraph info */
|
||||
LIST_ENTRY(ngpcb) socks; /* linked list of sockets */
|
||||
int type; /* NG_CONTROL or NG_DATA */
|
||||
};
|
||||
|
||||
/* Per-node private data */
|
||||
struct ngsock {
|
||||
struct ng_node *node; /* the associated netgraph node */
|
||||
struct ngpcb *datasock; /* optional data socket */
|
||||
struct ngpcb *ctlsock; /* optional control socket */
|
||||
int flags;
|
||||
int refs;
|
||||
struct mtx mtx; /* mtx to wait on */
|
||||
int error; /* place to store error */
|
||||
ng_ID_t node_id; /* a hint for netstat(1) to find the node */
|
||||
};
|
||||
#define NGS_FLAG_NOLINGER 1 /* close with last hook */
|
||||
|
||||
#endif /* _NETGRAPH_NG_SOCKETVAR_H_ */
|
||||
|
||||
|
@ -67,7 +67,6 @@ netgraphprotopr(u_long off, const char *name, int af1 __unused,
|
||||
{
|
||||
struct ngpcb *this, *next;
|
||||
struct ngpcb ngpcb;
|
||||
struct ngsock info;
|
||||
struct socket sockb;
|
||||
int debug = 1;
|
||||
|
||||
@ -165,15 +164,10 @@ netgraphprotopr(u_long off, const char *name, int af1 __unused,
|
||||
printf("%-5.5s %6u %6u ",
|
||||
name, sockb.so_rcv.sb_cc, sockb.so_snd.sb_cc);
|
||||
|
||||
/* Get ngsock structure */
|
||||
if (ngpcb.sockdata == NULL) /* unconnected data socket */
|
||||
goto finish;
|
||||
kread((u_long)ngpcb.sockdata, (char *)&info, sizeof(info));
|
||||
|
||||
/* Get info on associated node */
|
||||
if (info.node_id == 0 || csock == -1)
|
||||
if (ngpcb.node_id == 0 || csock == -1)
|
||||
goto finish;
|
||||
snprintf(path, sizeof(path), "[%x]:", info.node_id);
|
||||
snprintf(path, sizeof(path), "[%x]:", ngpcb.node_id);
|
||||
if (NgSendMsg(csock, path,
|
||||
NGM_GENERIC_COOKIE, NGM_NODEINFO, NULL, 0) < 0)
|
||||
goto finish;
|
||||
|
Loading…
Reference in New Issue
Block a user