forked from Minki/linux
Merge branch 'sctp_diag-fixes'
Phil Sutter says: ==================== sctp_diag: A bunch of fixes for upcoming 'ss' support The following series contains a number of fixes necessary to make my yet unpublished 'ss' support patch functional. Changes since v1: - Fixed patch 2/3 - Rebased whole series onto current net-next/master Changes since v2: - Improved description of patch 2/3 ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
05ec40f06a
@ -705,70 +705,6 @@ typedef struct sctp_auth_chunk {
|
||||
sctp_authhdr_t auth_hdr;
|
||||
} __packed sctp_auth_chunk_t;
|
||||
|
||||
struct sctp_info {
|
||||
__u32 sctpi_tag;
|
||||
__u32 sctpi_state;
|
||||
__u32 sctpi_rwnd;
|
||||
__u16 sctpi_unackdata;
|
||||
__u16 sctpi_penddata;
|
||||
__u16 sctpi_instrms;
|
||||
__u16 sctpi_outstrms;
|
||||
__u32 sctpi_fragmentation_point;
|
||||
__u32 sctpi_inqueue;
|
||||
__u32 sctpi_outqueue;
|
||||
__u32 sctpi_overall_error;
|
||||
__u32 sctpi_max_burst;
|
||||
__u32 sctpi_maxseg;
|
||||
__u32 sctpi_peer_rwnd;
|
||||
__u32 sctpi_peer_tag;
|
||||
__u8 sctpi_peer_capable;
|
||||
__u8 sctpi_peer_sack;
|
||||
__u16 __reserved1;
|
||||
|
||||
/* assoc status info */
|
||||
__u64 sctpi_isacks;
|
||||
__u64 sctpi_osacks;
|
||||
__u64 sctpi_opackets;
|
||||
__u64 sctpi_ipackets;
|
||||
__u64 sctpi_rtxchunks;
|
||||
__u64 sctpi_outofseqtsns;
|
||||
__u64 sctpi_idupchunks;
|
||||
__u64 sctpi_gapcnt;
|
||||
__u64 sctpi_ouodchunks;
|
||||
__u64 sctpi_iuodchunks;
|
||||
__u64 sctpi_oodchunks;
|
||||
__u64 sctpi_iodchunks;
|
||||
__u64 sctpi_octrlchunks;
|
||||
__u64 sctpi_ictrlchunks;
|
||||
|
||||
/* primary transport info */
|
||||
struct sockaddr_storage sctpi_p_address;
|
||||
__s32 sctpi_p_state;
|
||||
__u32 sctpi_p_cwnd;
|
||||
__u32 sctpi_p_srtt;
|
||||
__u32 sctpi_p_rto;
|
||||
__u32 sctpi_p_hbinterval;
|
||||
__u32 sctpi_p_pathmaxrxt;
|
||||
__u32 sctpi_p_sackdelay;
|
||||
__u32 sctpi_p_sackfreq;
|
||||
__u32 sctpi_p_ssthresh;
|
||||
__u32 sctpi_p_partial_bytes_acked;
|
||||
__u32 sctpi_p_flight_size;
|
||||
__u16 sctpi_p_error;
|
||||
__u16 __reserved2;
|
||||
|
||||
/* sctp sock info */
|
||||
__u32 sctpi_s_autoclose;
|
||||
__u32 sctpi_s_adaptation_ind;
|
||||
__u32 sctpi_s_pd_point;
|
||||
__u8 sctpi_s_nodelay;
|
||||
__u8 sctpi_s_disable_fragments;
|
||||
__u8 sctpi_s_v4mapped;
|
||||
__u8 sctpi_s_frag_interleave;
|
||||
__u32 sctpi_s_type;
|
||||
__u32 __reserved3;
|
||||
};
|
||||
|
||||
struct sctp_infox {
|
||||
struct sctp_info *sctpinfo;
|
||||
struct sctp_association *asoc;
|
||||
|
@ -944,4 +944,68 @@ struct sctp_default_prinfo {
|
||||
__u16 pr_policy;
|
||||
};
|
||||
|
||||
struct sctp_info {
|
||||
__u32 sctpi_tag;
|
||||
__u32 sctpi_state;
|
||||
__u32 sctpi_rwnd;
|
||||
__u16 sctpi_unackdata;
|
||||
__u16 sctpi_penddata;
|
||||
__u16 sctpi_instrms;
|
||||
__u16 sctpi_outstrms;
|
||||
__u32 sctpi_fragmentation_point;
|
||||
__u32 sctpi_inqueue;
|
||||
__u32 sctpi_outqueue;
|
||||
__u32 sctpi_overall_error;
|
||||
__u32 sctpi_max_burst;
|
||||
__u32 sctpi_maxseg;
|
||||
__u32 sctpi_peer_rwnd;
|
||||
__u32 sctpi_peer_tag;
|
||||
__u8 sctpi_peer_capable;
|
||||
__u8 sctpi_peer_sack;
|
||||
__u16 __reserved1;
|
||||
|
||||
/* assoc status info */
|
||||
__u64 sctpi_isacks;
|
||||
__u64 sctpi_osacks;
|
||||
__u64 sctpi_opackets;
|
||||
__u64 sctpi_ipackets;
|
||||
__u64 sctpi_rtxchunks;
|
||||
__u64 sctpi_outofseqtsns;
|
||||
__u64 sctpi_idupchunks;
|
||||
__u64 sctpi_gapcnt;
|
||||
__u64 sctpi_ouodchunks;
|
||||
__u64 sctpi_iuodchunks;
|
||||
__u64 sctpi_oodchunks;
|
||||
__u64 sctpi_iodchunks;
|
||||
__u64 sctpi_octrlchunks;
|
||||
__u64 sctpi_ictrlchunks;
|
||||
|
||||
/* primary transport info */
|
||||
struct sockaddr_storage sctpi_p_address;
|
||||
__s32 sctpi_p_state;
|
||||
__u32 sctpi_p_cwnd;
|
||||
__u32 sctpi_p_srtt;
|
||||
__u32 sctpi_p_rto;
|
||||
__u32 sctpi_p_hbinterval;
|
||||
__u32 sctpi_p_pathmaxrxt;
|
||||
__u32 sctpi_p_sackdelay;
|
||||
__u32 sctpi_p_sackfreq;
|
||||
__u32 sctpi_p_ssthresh;
|
||||
__u32 sctpi_p_partial_bytes_acked;
|
||||
__u32 sctpi_p_flight_size;
|
||||
__u16 sctpi_p_error;
|
||||
__u16 __reserved2;
|
||||
|
||||
/* sctp sock info */
|
||||
__u32 sctpi_s_autoclose;
|
||||
__u32 sctpi_s_adaptation_ind;
|
||||
__u32 sctpi_s_pd_point;
|
||||
__u8 sctpi_s_nodelay;
|
||||
__u8 sctpi_s_disable_fragments;
|
||||
__u8 sctpi_s_v4mapped;
|
||||
__u8 sctpi_s_frag_interleave;
|
||||
__u32 sctpi_s_type;
|
||||
__u32 __reserved3;
|
||||
};
|
||||
|
||||
#endif /* _UAPI_SCTP_H */
|
||||
|
@ -13,6 +13,7 @@ static void inet_diag_msg_sctpasoc_fill(struct inet_diag_msg *r,
|
||||
{
|
||||
union sctp_addr laddr, paddr;
|
||||
struct dst_entry *dst;
|
||||
struct timer_list *t3_rtx = &asoc->peer.primary_path->T3_rtx_timer;
|
||||
|
||||
laddr = list_entry(asoc->base.bind_addr.address_list.next,
|
||||
struct sctp_sockaddr_entry, list)->a;
|
||||
@ -40,10 +41,15 @@ static void inet_diag_msg_sctpasoc_fill(struct inet_diag_msg *r,
|
||||
}
|
||||
|
||||
r->idiag_state = asoc->state;
|
||||
r->idiag_timer = SCTP_EVENT_TIMEOUT_T3_RTX;
|
||||
r->idiag_retrans = asoc->rtx_data_chunks;
|
||||
r->idiag_expires = jiffies_to_msecs(
|
||||
asoc->timeouts[SCTP_EVENT_TIMEOUT_T3_RTX] - jiffies);
|
||||
if (timer_pending(t3_rtx)) {
|
||||
r->idiag_timer = SCTP_EVENT_TIMEOUT_T3_RTX;
|
||||
r->idiag_retrans = asoc->rtx_data_chunks;
|
||||
r->idiag_expires = jiffies_to_msecs(t3_rtx->expires - jiffies);
|
||||
} else {
|
||||
r->idiag_timer = 0;
|
||||
r->idiag_retrans = 0;
|
||||
r->idiag_expires = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int inet_diag_msg_sctpladdrs_fill(struct sk_buff *skb,
|
||||
@ -350,7 +356,7 @@ static int sctp_ep_dump(struct sctp_endpoint *ep, void *p)
|
||||
if (cb->args[4] < cb->args[1])
|
||||
goto next;
|
||||
|
||||
if ((r->idiag_states & ~TCPF_LISTEN) && !list_empty(&ep->asocs))
|
||||
if (!(r->idiag_states & TCPF_LISTEN) && !list_empty(&ep->asocs))
|
||||
goto next;
|
||||
|
||||
if (r->sdiag_family != AF_UNSPEC &&
|
||||
@ -465,7 +471,7 @@ skip:
|
||||
* 3 : to mark if we have dumped the ep info of the current asoc
|
||||
* 4 : to work as a temporary variable to traversal list
|
||||
*/
|
||||
if (!(idiag_states & ~TCPF_LISTEN))
|
||||
if (!(idiag_states & ~(TCPF_LISTEN | TCPF_CLOSE)))
|
||||
goto done;
|
||||
sctp_for_each_transport(sctp_tsp_dump, net, cb->args[2], &commp);
|
||||
done:
|
||||
|
Loading…
Reference in New Issue
Block a user