Add connection flowid to siftr(4).

Reviewed by:	lstewart
MFC after:	1 week
Sponsored by:	Limelight Networks
Differential Revision:	https://reviews.freebsd.org/D2089
This commit is contained in:
Hiren Panchasara 2015-03-18 23:24:25 +00:00
parent ab9d0c2789
commit a025fd1487
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=280233
2 changed files with 16 additions and 4 deletions

View file

@ -30,7 +30,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd November 12, 2010
.Dd March 18, 2015
.Dt SIFTR 4
.Os
.Sh NAME
@ -335,6 +335,13 @@ Bytes acknowledged via SACK are not excluded from this count.
.It Va 26
The current number of segments in the reassembly queue.
.El
.Bl -tag -offset indent -width Va
.It Va 27
Flowid for the connection.
A caveat: Zero '0' either represents a valid flowid or a default value when it's
not being set. There is no easy way to differentiate without looking at actual
network interface card and drivers being used.
.El
.Pp
The third type of log message is written to the file when the module is disabled
and ceases collecting data from the running kernel.

View file

@ -227,6 +227,8 @@ struct pkt_node {
u_int sent_inflight_bytes;
/* Number of segments currently in the reassembly queue. */
int t_segqlen;
/* Flowid for the connection. */
u_int flowid;
/* Link to next pkt_node in the list. */
STAILQ_ENTRY(pkt_node) nodes;
};
@ -485,7 +487,8 @@ siftr_process_pkt(struct pkt_node * pkt_node)
pkt_node->rcv_buf_hiwater,
pkt_node->rcv_buf_cc,
pkt_node->sent_inflight_bytes,
pkt_node->t_segqlen);
pkt_node->t_segqlen,
pkt_node->flowid);
} else { /* IPv4 packet */
pkt_node->ip_laddr[0] = FIRST_OCTET(pkt_node->ip_laddr[3]);
pkt_node->ip_laddr[1] = SECOND_OCTET(pkt_node->ip_laddr[3]);
@ -501,7 +504,7 @@ siftr_process_pkt(struct pkt_node * pkt_node)
log_buf->ae_bytesused = snprintf(log_buf->ae_data,
MAX_LOG_MSG_LEN,
"%c,0x%08x,%jd.%06ld,%u.%u.%u.%u,%u,%u.%u.%u.%u,%u,%ld,%ld,"
"%ld,%ld,%ld,%u,%u,%u,%u,%u,%u,%u,%d,%u,%u,%u,%u,%u,%u\n",
"%ld,%ld,%ld,%u,%u,%u,%u,%u,%u,%u,%d,%u,%u,%u,%u,%u,%u,%u\n",
direction[pkt_node->direction],
pkt_node->hash,
(intmax_t)pkt_node->tval.tv_sec,
@ -534,7 +537,8 @@ siftr_process_pkt(struct pkt_node * pkt_node)
pkt_node->rcv_buf_hiwater,
pkt_node->rcv_buf_cc,
pkt_node->sent_inflight_bytes,
pkt_node->t_segqlen);
pkt_node->t_segqlen,
pkt_node->flowid);
#ifdef SIFTR_IPV6
}
#endif
@ -787,6 +791,7 @@ siftr_siftdata(struct pkt_node *pn, struct inpcb *inp, struct tcpcb *tp,
pn->rcv_buf_cc = sbused(&inp->inp_socket->so_rcv);
pn->sent_inflight_bytes = tp->snd_max - tp->snd_una;
pn->t_segqlen = tp->t_segqlen;
pn->flowid = inp->inp_flowid;
/* We've finished accessing the tcb so release the lock. */
if (inp_locally_locked)