diff options
| author | Stephen Hemminger <shemminger@osdl.org> | 2004-04-23 02:28:42 -0700 |
|---|---|---|
| committer | Stephen Hemminger <shemminger@osdl.org> | 2004-04-23 02:28:42 -0700 |
| commit | 46f3dece4eeefa26f3fe223849d83b3333ad3676 (patch) | |
| tree | 13433bca32668880bef2a3d7245d1e5fed432d8e | |
| parent | 7ce42ae14e32016ac8e83003db5811a33e3b16e3 (diff) | |
[TCP]: Report vegas info via tcp_diag.
| -rw-r--r-- | include/linux/tcp_diag.h | 13 | ||||
| -rw-r--r-- | net/ipv4/tcp_diag.c | 11 |
2 files changed, 23 insertions, 1 deletions
diff --git a/include/linux/tcp_diag.h b/include/linux/tcp_diag.h index 91a8fa70e198..ceee962e1d15 100644 --- a/include/linux/tcp_diag.h +++ b/include/linux/tcp_diag.h @@ -98,9 +98,10 @@ enum TCPDIAG_NONE, TCPDIAG_MEMINFO, TCPDIAG_INFO, + TCPDIAG_VEGASINFO, }; -#define TCPDIAG_MAX TCPDIAG_INFO +#define TCPDIAG_MAX TCPDIAG_VEGASINFO /* TCPDIAG_MEM */ @@ -113,4 +114,14 @@ struct tcpdiag_meminfo __u32 tcpdiag_tmem; }; +/* TCPDIAG_VEGASINFO */ + +struct tcpvegas_info { + __u32 tcpv_enabled; + __u32 tcpv_rttcnt; + __u32 tcpv_rtt; + __u32 tcpv_minrtt; +}; + + #endif /* _TCP_DIAG_H_ */ diff --git a/net/ipv4/tcp_diag.c b/net/ipv4/tcp_diag.c index defff09f96e9..305fe2eae698 100644 --- a/net/ipv4/tcp_diag.c +++ b/net/ipv4/tcp_diag.c @@ -50,6 +50,7 @@ static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk, struct nlmsghdr *nlh; struct tcp_info *info = NULL; struct tcpdiag_meminfo *minfo = NULL; + struct tcpvegas_info *vinfo = NULL; unsigned char *b = skb->tail; nlh = NLMSG_PUT(skb, pid, seq, TCPDIAG_GETSOCK, sizeof(*r)); @@ -59,6 +60,9 @@ static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk, minfo = TCPDIAG_PUT(skb, TCPDIAG_MEMINFO, sizeof(*minfo)); if (ext & (1<<(TCPDIAG_INFO-1))) info = TCPDIAG_PUT(skb, TCPDIAG_INFO, sizeof(*info)); + + if (tcp_is_vegas(tp) && (ext & (1<<(TCPDIAG_VEGASINFO-1)))) + vinfo = TCPDIAG_PUT(skb, TCPDIAG_VEGASINFO, sizeof(*vinfo)); } r->tcpdiag_family = sk->sk_family; r->tcpdiag_state = sk->sk_state; @@ -196,6 +200,13 @@ static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk, info->tcpi_reordering = tp->reordering; } + if (vinfo) { + vinfo->tcpv_enabled = tp->vegas.doing_vegas_now; + vinfo->tcpv_rttcnt = tp->vegas.cntRTT; + vinfo->tcpv_rtt = tp->vegas.baseRTT; + vinfo->tcpv_minrtt = tp->vegas.minRTT; + } + nlh->nlmsg_len = skb->tail - b; return skb->len; |
