From: Phil Sutter <phil@nwl.cc> Date: 2016-08-04 10:13:03
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
Phil Sutter (3):
sctp: Export struct sctp_info to userspace
sctp_diag: Fix T3_rtx timer export
sctp_diag: Respect ss adding TCPF_CLOSE to idiag_states
include/linux/sctp.h | 64 -----------------------------------------------
include/uapi/linux/sctp.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++
net/sctp/sctp_diag.c | 18 ++++++++-----
3 files changed, 76 insertions(+), 70 deletions(-)
--
2.8.2
From: Phil Sutter <phil@nwl.cc> Date: 2016-08-04 10:13:03
The asoc's timer value is not kept in asoc->timeouts array but in it's
primary transport instead.
Furthermore, we must export the timer only if it is pending, otherwise
the value will underrun when stored in an unsigned variable and
user space will only see a very large timeout value.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
Changes since v1:
- Introduce local variable to shorten long lines.
- Use timer_pending() to decide whether to export the timer value.
- Export the primary path's value instead of garbage.
- If not exporting, zero fields to not confuse userspace.
Changes since v2:
- Rewrote description, emphasizing on wrong value export
rather than exporting conditionally.
---
net/sctp/sctp_diag.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
@@ -705,70 +705,6 @@ typedef struct sctp_auth_chunk {sctp_authhdr_tauth_hdr;}__packedsctp_auth_chunk_t;-structsctp_info{-__u32sctpi_tag;-__u32sctpi_state;-__u32sctpi_rwnd;-__u16sctpi_unackdata;-__u16sctpi_penddata;-__u16sctpi_instrms;-__u16sctpi_outstrms;-__u32sctpi_fragmentation_point;-__u32sctpi_inqueue;-__u32sctpi_outqueue;-__u32sctpi_overall_error;-__u32sctpi_max_burst;-__u32sctpi_maxseg;-__u32sctpi_peer_rwnd;-__u32sctpi_peer_tag;-__u8sctpi_peer_capable;-__u8sctpi_peer_sack;-__u16__reserved1;--/* assoc status info */-__u64sctpi_isacks;-__u64sctpi_osacks;-__u64sctpi_opackets;-__u64sctpi_ipackets;-__u64sctpi_rtxchunks;-__u64sctpi_outofseqtsns;-__u64sctpi_idupchunks;-__u64sctpi_gapcnt;-__u64sctpi_ouodchunks;-__u64sctpi_iuodchunks;-__u64sctpi_oodchunks;-__u64sctpi_iodchunks;-__u64sctpi_octrlchunks;-__u64sctpi_ictrlchunks;--/* primary transport info */-structsockaddr_storagesctpi_p_address;-__s32sctpi_p_state;-__u32sctpi_p_cwnd;-__u32sctpi_p_srtt;-__u32sctpi_p_rto;-__u32sctpi_p_hbinterval;-__u32sctpi_p_pathmaxrxt;-__u32sctpi_p_sackdelay;-__u32sctpi_p_sackfreq;-__u32sctpi_p_ssthresh;-__u32sctpi_p_partial_bytes_acked;-__u32sctpi_p_flight_size;-__u16sctpi_p_error;-__u16__reserved2;--/* sctp sock info */-__u32sctpi_s_autoclose;-__u32sctpi_s_adaptation_ind;-__u32sctpi_s_pd_point;-__u8sctpi_s_nodelay;-__u8sctpi_s_disable_fragments;-__u8sctpi_s_v4mapped;-__u8sctpi_s_frag_interleave;-__u32sctpi_s_type;-__u32__reserved3;-};-structsctp_infox{structsctp_info*sctpinfo;structsctp_association*asoc;
@@ -944,4 +944,68 @@ struct sctp_default_prinfo {__u16pr_policy;};+structsctp_info{+__u32sctpi_tag;+__u32sctpi_state;+__u32sctpi_rwnd;+__u16sctpi_unackdata;+__u16sctpi_penddata;+__u16sctpi_instrms;+__u16sctpi_outstrms;+__u32sctpi_fragmentation_point;+__u32sctpi_inqueue;+__u32sctpi_outqueue;+__u32sctpi_overall_error;+__u32sctpi_max_burst;+__u32sctpi_maxseg;+__u32sctpi_peer_rwnd;+__u32sctpi_peer_tag;+__u8sctpi_peer_capable;+__u8sctpi_peer_sack;+__u16__reserved1;++/* assoc status info */+__u64sctpi_isacks;+__u64sctpi_osacks;+__u64sctpi_opackets;+__u64sctpi_ipackets;+__u64sctpi_rtxchunks;+__u64sctpi_outofseqtsns;+__u64sctpi_idupchunks;+__u64sctpi_gapcnt;+__u64sctpi_ouodchunks;+__u64sctpi_iuodchunks;+__u64sctpi_oodchunks;+__u64sctpi_iodchunks;+__u64sctpi_octrlchunks;+__u64sctpi_ictrlchunks;++/* primary transport info */+structsockaddr_storagesctpi_p_address;+__s32sctpi_p_state;+__u32sctpi_p_cwnd;+__u32sctpi_p_srtt;+__u32sctpi_p_rto;+__u32sctpi_p_hbinterval;+__u32sctpi_p_pathmaxrxt;+__u32sctpi_p_sackdelay;+__u32sctpi_p_sackfreq;+__u32sctpi_p_ssthresh;+__u32sctpi_p_partial_bytes_acked;+__u32sctpi_p_flight_size;+__u16sctpi_p_error;+__u16__reserved2;++/* sctp sock info */+__u32sctpi_s_autoclose;+__u32sctpi_s_adaptation_ind;+__u32sctpi_s_pd_point;+__u8sctpi_s_nodelay;+__u8sctpi_s_disable_fragments;+__u8sctpi_s_v4mapped;+__u8sctpi_s_frag_interleave;+__u32sctpi_s_type;+__u32__reserved3;+};+#endif /* _UAPI_SCTP_H */
From: Phil Sutter <phil@nwl.cc> Date: 2016-08-04 10:13:03
Since 'ss' always adds TCPF_CLOSE to idiag_states flags, sctp_diag can't
rely upon TCPF_LISTEN flag solely being present when listening sockets
are requested.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
net/sctp/sctp_diag.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
On Thu, Aug 04, 2016 at 12:11:54PM +0200, Phil Sutter wrote:
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
Phil Sutter (3):
sctp: Export struct sctp_info to userspace
sctp_diag: Fix T3_rtx timer export
sctp_diag: Respect ss adding TCPF_CLOSE to idiag_states
@@ -705,70 +705,6 @@ typedef struct sctp_auth_chunk {sctp_authhdr_tauth_hdr;}__packedsctp_auth_chunk_t;-structsctp_info{-__u32sctpi_tag;-__u32sctpi_state;-__u32sctpi_rwnd;-__u16sctpi_unackdata;-__u16sctpi_penddata;-__u16sctpi_instrms;-__u16sctpi_outstrms;-__u32sctpi_fragmentation_point;-__u32sctpi_inqueue;-__u32sctpi_outqueue;-__u32sctpi_overall_error;-__u32sctpi_max_burst;-__u32sctpi_maxseg;-__u32sctpi_peer_rwnd;-__u32sctpi_peer_tag;-__u8sctpi_peer_capable;-__u8sctpi_peer_sack;-__u16__reserved1;--/* assoc status info */-__u64sctpi_isacks;-__u64sctpi_osacks;-__u64sctpi_opackets;-__u64sctpi_ipackets;-__u64sctpi_rtxchunks;-__u64sctpi_outofseqtsns;-__u64sctpi_idupchunks;-__u64sctpi_gapcnt;-__u64sctpi_ouodchunks;-__u64sctpi_iuodchunks;-__u64sctpi_oodchunks;-__u64sctpi_iodchunks;-__u64sctpi_octrlchunks;-__u64sctpi_ictrlchunks;--/* primary transport info */-structsockaddr_storagesctpi_p_address;-__s32sctpi_p_state;-__u32sctpi_p_cwnd;-__u32sctpi_p_srtt;-__u32sctpi_p_rto;-__u32sctpi_p_hbinterval;-__u32sctpi_p_pathmaxrxt;-__u32sctpi_p_sackdelay;-__u32sctpi_p_sackfreq;-__u32sctpi_p_ssthresh;-__u32sctpi_p_partial_bytes_acked;-__u32sctpi_p_flight_size;-__u16sctpi_p_error;-__u16__reserved2;--/* sctp sock info */-__u32sctpi_s_autoclose;-__u32sctpi_s_adaptation_ind;-__u32sctpi_s_pd_point;-__u8sctpi_s_nodelay;-__u8sctpi_s_disable_fragments;-__u8sctpi_s_v4mapped;-__u8sctpi_s_frag_interleave;-__u32sctpi_s_type;-__u32__reserved3;-};-structsctp_infox{structsctp_info*sctpinfo;structsctp_association*asoc;
@@ -944,4 +944,68 @@ struct sctp_default_prinfo {__u16pr_policy;};+structsctp_info{+__u32sctpi_tag;+__u32sctpi_state;+__u32sctpi_rwnd;+__u16sctpi_unackdata;+__u16sctpi_penddata;+__u16sctpi_instrms;+__u16sctpi_outstrms;+__u32sctpi_fragmentation_point;+__u32sctpi_inqueue;+__u32sctpi_outqueue;+__u32sctpi_overall_error;+__u32sctpi_max_burst;+__u32sctpi_maxseg;+__u32sctpi_peer_rwnd;+__u32sctpi_peer_tag;+__u8sctpi_peer_capable;+__u8sctpi_peer_sack;+__u16__reserved1;++/* assoc status info */+__u64sctpi_isacks;+__u64sctpi_osacks;+__u64sctpi_opackets;+__u64sctpi_ipackets;+__u64sctpi_rtxchunks;+__u64sctpi_outofseqtsns;+__u64sctpi_idupchunks;+__u64sctpi_gapcnt;+__u64sctpi_ouodchunks;+__u64sctpi_iuodchunks;+__u64sctpi_oodchunks;+__u64sctpi_iodchunks;+__u64sctpi_octrlchunks;+__u64sctpi_ictrlchunks;++/* primary transport info */+structsockaddr_storagesctpi_p_address;+__s32sctpi_p_state;+__u32sctpi_p_cwnd;+__u32sctpi_p_srtt;+__u32sctpi_p_rto;+__u32sctpi_p_hbinterval;+__u32sctpi_p_pathmaxrxt;+__u32sctpi_p_sackdelay;+__u32sctpi_p_sackfreq;+__u32sctpi_p_ssthresh;+__u32sctpi_p_partial_bytes_acked;+__u32sctpi_p_flight_size;+__u16sctpi_p_error;+__u16__reserved2;++/* sctp sock info */+__u32sctpi_s_autoclose;+__u32sctpi_s_adaptation_ind;+__u32sctpi_s_pd_point;+__u8sctpi_s_nodelay;+__u8sctpi_s_disable_fragments;+__u8sctpi_s_v4mapped;+__u8sctpi_s_frag_interleave;+__u32sctpi_s_type;+__u32__reserved3;+};+
If you export these, shouldn't they be converted to the corresponding
uint<size>_t variants?
Neil
#endif /* _UAPI_SCTP_H */
--
2.8.2
--
To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
@@ -705,70 +705,6 @@ typedef struct sctp_auth_chunk {sctp_authhdr_tauth_hdr;}__packedsctp_auth_chunk_t;-structsctp_info{-__u32sctpi_tag;-__u32sctpi_state;-__u32sctpi_rwnd;-__u16sctpi_unackdata;-__u16sctpi_penddata;-__u16sctpi_instrms;-__u16sctpi_outstrms;-__u32sctpi_fragmentation_point;-__u32sctpi_inqueue;-__u32sctpi_outqueue;-__u32sctpi_overall_error;-__u32sctpi_max_burst;-__u32sctpi_maxseg;-__u32sctpi_peer_rwnd;-__u32sctpi_peer_tag;-__u8sctpi_peer_capable;-__u8sctpi_peer_sack;-__u16__reserved1;--/* assoc status info */-__u64sctpi_isacks;-__u64sctpi_osacks;-__u64sctpi_opackets;-__u64sctpi_ipackets;-__u64sctpi_rtxchunks;-__u64sctpi_outofseqtsns;-__u64sctpi_idupchunks;-__u64sctpi_gapcnt;-__u64sctpi_ouodchunks;-__u64sctpi_iuodchunks;-__u64sctpi_oodchunks;-__u64sctpi_iodchunks;-__u64sctpi_octrlchunks;-__u64sctpi_ictrlchunks;--/* primary transport info */-structsockaddr_storagesctpi_p_address;-__s32sctpi_p_state;-__u32sctpi_p_cwnd;-__u32sctpi_p_srtt;-__u32sctpi_p_rto;-__u32sctpi_p_hbinterval;-__u32sctpi_p_pathmaxrxt;-__u32sctpi_p_sackdelay;-__u32sctpi_p_sackfreq;-__u32sctpi_p_ssthresh;-__u32sctpi_p_partial_bytes_acked;-__u32sctpi_p_flight_size;-__u16sctpi_p_error;-__u16__reserved2;--/* sctp sock info */-__u32sctpi_s_autoclose;-__u32sctpi_s_adaptation_ind;-__u32sctpi_s_pd_point;-__u8sctpi_s_nodelay;-__u8sctpi_s_disable_fragments;-__u8sctpi_s_v4mapped;-__u8sctpi_s_frag_interleave;-__u32sctpi_s_type;-__u32__reserved3;-};-structsctp_infox{structsctp_info*sctpinfo;structsctp_association*asoc;
@@ -944,4 +944,68 @@ struct sctp_default_prinfo {__u16pr_policy;};+structsctp_info{+__u32sctpi_tag;+__u32sctpi_state;+__u32sctpi_rwnd;+__u16sctpi_unackdata;+__u16sctpi_penddata;+__u16sctpi_instrms;+__u16sctpi_outstrms;+__u32sctpi_fragmentation_point;+__u32sctpi_inqueue;+__u32sctpi_outqueue;+__u32sctpi_overall_error;+__u32sctpi_max_burst;+__u32sctpi_maxseg;+__u32sctpi_peer_rwnd;+__u32sctpi_peer_tag;+__u8sctpi_peer_capable;+__u8sctpi_peer_sack;+__u16__reserved1;++/* assoc status info */+__u64sctpi_isacks;+__u64sctpi_osacks;+__u64sctpi_opackets;+__u64sctpi_ipackets;+__u64sctpi_rtxchunks;+__u64sctpi_outofseqtsns;+__u64sctpi_idupchunks;+__u64sctpi_gapcnt;+__u64sctpi_ouodchunks;+__u64sctpi_iuodchunks;+__u64sctpi_oodchunks;+__u64sctpi_iodchunks;+__u64sctpi_octrlchunks;+__u64sctpi_ictrlchunks;++/* primary transport info */+structsockaddr_storagesctpi_p_address;+__s32sctpi_p_state;+__u32sctpi_p_cwnd;+__u32sctpi_p_srtt;+__u32sctpi_p_rto;+__u32sctpi_p_hbinterval;+__u32sctpi_p_pathmaxrxt;+__u32sctpi_p_sackdelay;+__u32sctpi_p_sackfreq;+__u32sctpi_p_ssthresh;+__u32sctpi_p_partial_bytes_acked;+__u32sctpi_p_flight_size;+__u16sctpi_p_error;+__u16__reserved2;++/* sctp sock info */+__u32sctpi_s_autoclose;+__u32sctpi_s_adaptation_ind;+__u32sctpi_s_pd_point;+__u8sctpi_s_nodelay;+__u8sctpi_s_disable_fragments;+__u8sctpi_s_v4mapped;+__u8sctpi_s_frag_interleave;+__u32sctpi_s_type;+__u32__reserved3;+};+
If you export these, shouldn't they be converted to the corresponding
uint<size>_t variants?
As mentioned earlier, uapi headers using the __u* types seems not
uncommon. Another aspect is consistency, these types are used throughout
the whole file already, so if I should change them, they all should be
changed. And assuming uapi/linux/tcp.h being a good example: struct
tcp_info uses them also.
Cheers, Phil