Re: [net-next PATCH] ethtool: Add support for SCTP verification tag in Rx NFC
On Mon, Aug 22, 2016 at 6:05 AM, Ben Hutchingswrote: > On Sat, 2016-08-20 at 18:56 -0700, Alexander Duyck wrote: >> > On Sat, Aug 20, 2016 at 5:21 PM, Ben Hutchings >> > wrote: >> > >> > On Fri, 2016-08-19 at 14:32 -0700, Alexander Duyck wrote: >> > > >> > > The i40e hardware has support for SCTP filtering via Rx NFC however the >> > > default configuration expects us to include the verification tag as a >> > > part >> > > of the filter. In order to support that I need to be able to transfer >> > > that >> > > data through the ethtool interface via a new structure. >> > > >> > > This patch adds a new structure to allow us to pass the verification tag >> > > for IPv4 or IPv6 SCTP traffic. >> > [...] >> > >> > This looks like an incompatible ABI change. I suppose it could be OK >> > if no drivers implemented flow steering for SCTP using the previously >> > specified structure, but have you checked that that is the case? >> > >> > Ben. >> >> Well the structure itself matches the TCP flow spec for the TCP flow >> sized portion. All I am doing with this patch is adding an extension >> to that which is still confined to the 52 byte limit of the flow >> > union. > > But that extension will be ignored by any drivers that implemented the > API as previously defined. (If there aren't any, as I said, this > doesn't really matter.) The ixgbe driver supports sctp already, and was using the TCP flow spec to do it. > With previous extensions (everything in struct ethtool_flow_ext) we've > introduced new type flags to ensure that they won't be silently > ignored. You could add a new extended-SCTP type value for the same > reason. I guess I could go the extended flow route. I an just define a new type for SCTP_V4 and SCTP_V6. > [...] >> One thing I could do if you would like would be to spin up another >> patch to force the kernel to return -EINVAL if we are masking in >> fields that are out of bounds for the flow specification. That way we >> can handle this a bit more concisely in the future should we end up >> > having to extend any other flow specifications. > > It's too late to do that now. I disagree. For now what I can do is lock down the existing flow specifications so nobody tries to cheat and smuggle data in on the unused space and for the new extended specifications we make sure that they are included in a mask verification so that if we have to add any new fields they will already be checked for. I'll make sure to include such a patch for v2. Thanks. - Alex
Re: [net-next PATCH] ethtool: Add support for SCTP verification tag in Rx NFC
On Sat, 2016-08-20 at 18:56 -0700, Alexander Duyck wrote: > > On Sat, Aug 20, 2016 at 5:21 PM, Ben Hutchingswrote: > > > > On Fri, 2016-08-19 at 14:32 -0700, Alexander Duyck wrote: > > > > > > The i40e hardware has support for SCTP filtering via Rx NFC however the > > > default configuration expects us to include the verification tag as a part > > > of the filter. In order to support that I need to be able to transfer > > > that > > > data through the ethtool interface via a new structure. > > > > > > This patch adds a new structure to allow us to pass the verification tag > > > for IPv4 or IPv6 SCTP traffic. > > [...] > > > > This looks like an incompatible ABI change. I suppose it could be OK > > if no drivers implemented flow steering for SCTP using the previously > > specified structure, but have you checked that that is the case? > > > > Ben. > > Well the structure itself matches the TCP flow spec for the TCP flow > sized portion. All I am doing with this patch is adding an extension > to that which is still confined to the 52 byte limit of the flow > > union. But that extension will be ignored by any drivers that implemented the API as previously defined. (If there aren't any, as I said, this doesn't really matter.) With previous extensions (everything in struct ethtool_flow_ext) we've introduced new type flags to ensure that they won't be silently ignored. You could add a new extended-SCTP type value for the same reason. [...] > One thing I could do if you would like would be to spin up another > patch to force the kernel to return -EINVAL if we are masking in > fields that are out of bounds for the flow specification. That way we > can handle this a bit more concisely in the future should we end up > > having to extend any other flow specifications. It's too late to do that now. Ben. -- Ben Hutchings Quantity is no substitute for quality, but it's the only one we've got. signature.asc Description: This is a digitally signed message part
Re: [net-next PATCH] ethtool: Add support for SCTP verification tag in Rx NFC
On Sat, Aug 20, 2016 at 5:21 PM, Ben Hutchingswrote: > On Fri, 2016-08-19 at 14:32 -0700, Alexander Duyck wrote: >> The i40e hardware has support for SCTP filtering via Rx NFC however the >> default configuration expects us to include the verification tag as a part >> of the filter. In order to support that I need to be able to transfer that >> data through the ethtool interface via a new structure. >> >> This patch adds a new structure to allow us to pass the verification tag >> for IPv4 or IPv6 SCTP traffic. > [...] > > This looks like an incompatible ABI change. I suppose it could be OK > if no drivers implemented flow steering for SCTP using the previously > specified structure, but have you checked that that is the case? > > Ben. Well the structure itself matches the TCP flow spec for the TCP flow sized portion. All I am doing with this patch is adding an extension to that which is still confined to the 52 byte limit of the flow union. The net result should be that the new value will appear masked if anything using the new specifier receives a rule using the old definition and for anything using the new flow spec that sends to the old code the extra value will be ignored. I can look into double checking the behavior to make certain I have that right on Monday. One thing I could do if you would like would be to spin up another patch to force the kernel to return -EINVAL if we are masking in fields that are out of bounds for the flow specification. That way we can handle this a bit more concisely in the future should we end up having to extend any other flow specifications. - Alex
Re: [net-next PATCH] ethtool: Add support for SCTP verification tag in Rx NFC
On Fri, 2016-08-19 at 14:32 -0700, Alexander Duyck wrote: > The i40e hardware has support for SCTP filtering via Rx NFC however the > default configuration expects us to include the verification tag as a part > of the filter. In order to support that I need to be able to transfer that > data through the ethtool interface via a new structure. > > This patch adds a new structure to allow us to pass the verification tag > for IPv4 or IPv6 SCTP traffic. [...] This looks like an incompatible ABI change. I suppose it could be OK if no drivers implemented flow steering for SCTP using the previously specified structure, but have you checked that that is the case? Ben. -- Ben Hutchings It's easier to fight for one's principles than to live up to them. signature.asc Description: This is a digitally signed message part
Re: [net-next PATCH] ethtool: Add support for SCTP verification tag in Rx NFC
On Fri, 2016-08-19 at 14:32 -0700, Alexander Duyck wrote: > The i40e hardware has support for SCTP filtering via Rx NFC however the > default configuration expects us to include the verification tag as a part > of the filter. In order to support that I need to be able to transfer that > data through the ethtool interface via a new structure. > > This patch adds a new structure to allow us to pass the verification tag > for IPv4 or IPv6 SCTP traffic. > > Signed-off-by: Alexander Duyck> --- > include/uapi/linux/ethtool.h | 50 > +++--- > 1 file changed, 46 insertions(+), 4 deletions(-) > > diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h > index b8f38e8..12ba8ac 100644 > --- a/include/uapi/linux/ethtool.h > +++ b/include/uapi/linux/ethtool.h > @@ -708,7 +708,7 @@ enum ethtool_flags { > * @pdst: Destination port > * @tos: Type-of-service > * > - * This can be used to specify a TCP/IPv4, UDP/IPv4 or SCTP/IPv4 flow. > + * This can be used to specify a TCP/IPv4 or UDP/IPv4 flow. > */ > struct ethtool_tcpip4_spec { > __be32 ip4src; > @@ -719,6 +719,27 @@ struct ethtool_tcpip4_spec { > }; > > /** > + * struct ethtool_sctpip4_spec - flow specification for SCTP/IPv4 > + * @ip4src: Source host > + * @ip4dst: Destination host > + * @psrc: Source port > + * @pdst: Destination port > + * @tos: Type-of-service > + * @vtag: Verification tag > + * > + * This can be used to specify a SCTP/IPv4 flow. > + */ > +struct ethtool_sctpip4_spec { > + __be32 ip4src; > + __be32 ip4dst; > + __be16 psrc; > + __be16 pdst; > + __u8tos; > + /* 3 byte hole */ > + __be32 vtag; > +}; > + > +/** > * struct ethtool_ah_espip4_spec - flow specification for IPsec/IPv4 > * @ip4src: Source host > * @ip4dst: Destination host > @@ -762,7 +783,7 @@ struct ethtool_usrip4_spec { > * @pdst: Destination port > * @tclass: Traffic Class > * > - * This can be used to specify a TCP/IPv6, UDP/IPv6 or SCTP/IPv6 flow. > + * This can be used to specify a TCP/IPv6 or UDP/IPv6 flow. > */ > struct ethtool_tcpip6_spec { > __be32 ip6src[4]; > @@ -773,6 +794,27 @@ struct ethtool_tcpip6_spec { > }; > > /** > + * struct ethtool_sctpip6_spec - flow specification for SCTP/IPv6 > + * @ip6src: Source host > + * @ip6dst: Destination host > + * @psrc: Source port > + * @pdst: Destination port > + * @tclass: Traffic Class > + * @vtag: Verification tag > + * > + * This can be used to specify a SCTP/IPv6 flow. > + */ > +struct ethtool_sctpip6_spec { > + __be32 ip6src[4]; > + __be32 ip6dst[4]; > + __be16 psrc; > + __be16 pdst; > + __u8tclass; > + /* 3 byte hole */ > + __be32 vtag; > +}; > + > +/** > * struct ethtool_ah_espip6_spec - flow specification for IPsec/IPv6 > * @ip6src: Source host > * @ip6dst: Destination host > @@ -807,13 +849,13 @@ struct ethtool_usrip6_spec { > union ethtool_flow_union { > struct ethtool_tcpip4_spec tcp_ip4_spec; > struct ethtool_tcpip4_spec udp_ip4_spec; > - struct ethtool_tcpip4_spec sctp_ip4_spec; > + struct ethtool_sctpip4_spec sctp_ip4_spec; > struct ethtool_ah_espip4_spec ah_ip4_spec; > struct ethtool_ah_espip4_spec esp_ip4_spec; > struct ethtool_usrip4_spec usr_ip4_spec; > struct ethtool_tcpip6_spec tcp_ip6_spec; > struct ethtool_tcpip6_spec udp_ip6_spec; > - struct ethtool_tcpip6_spec sctp_ip6_spec; > + struct ethtool_sctpip6_spec sctp_ip6_spec; > struct ethtool_ah_espip6_spec ah_ip6_spec; > struct ethtool_ah_espip6_spec esp_ip6_spec; > struct ethtool_usrip6_spec usr_ip6_spec; > Looks good to me. Reviewed-by: Greg Rose
[net-next PATCH] ethtool: Add support for SCTP verification tag in Rx NFC
The i40e hardware has support for SCTP filtering via Rx NFC however the default configuration expects us to include the verification tag as a part of the filter. In order to support that I need to be able to transfer that data through the ethtool interface via a new structure. This patch adds a new structure to allow us to pass the verification tag for IPv4 or IPv6 SCTP traffic. Signed-off-by: Alexander Duyck--- include/uapi/linux/ethtool.h | 50 +++--- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index b8f38e8..12ba8ac 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h @@ -708,7 +708,7 @@ enum ethtool_flags { * @pdst: Destination port * @tos: Type-of-service * - * This can be used to specify a TCP/IPv4, UDP/IPv4 or SCTP/IPv4 flow. + * This can be used to specify a TCP/IPv4 or UDP/IPv4 flow. */ struct ethtool_tcpip4_spec { __be32 ip4src; @@ -719,6 +719,27 @@ struct ethtool_tcpip4_spec { }; /** + * struct ethtool_sctpip4_spec - flow specification for SCTP/IPv4 + * @ip4src: Source host + * @ip4dst: Destination host + * @psrc: Source port + * @pdst: Destination port + * @tos: Type-of-service + * @vtag: Verification tag + * + * This can be used to specify a SCTP/IPv4 flow. + */ +struct ethtool_sctpip4_spec { + __be32 ip4src; + __be32 ip4dst; + __be16 psrc; + __be16 pdst; + __u8tos; + /* 3 byte hole */ + __be32 vtag; +}; + +/** * struct ethtool_ah_espip4_spec - flow specification for IPsec/IPv4 * @ip4src: Source host * @ip4dst: Destination host @@ -762,7 +783,7 @@ struct ethtool_usrip4_spec { * @pdst: Destination port * @tclass: Traffic Class * - * This can be used to specify a TCP/IPv6, UDP/IPv6 or SCTP/IPv6 flow. + * This can be used to specify a TCP/IPv6 or UDP/IPv6 flow. */ struct ethtool_tcpip6_spec { __be32 ip6src[4]; @@ -773,6 +794,27 @@ struct ethtool_tcpip6_spec { }; /** + * struct ethtool_sctpip6_spec - flow specification for SCTP/IPv6 + * @ip6src: Source host + * @ip6dst: Destination host + * @psrc: Source port + * @pdst: Destination port + * @tclass: Traffic Class + * @vtag: Verification tag + * + * This can be used to specify a SCTP/IPv6 flow. + */ +struct ethtool_sctpip6_spec { + __be32 ip6src[4]; + __be32 ip6dst[4]; + __be16 psrc; + __be16 pdst; + __u8tclass; + /* 3 byte hole */ + __be32 vtag; +}; + +/** * struct ethtool_ah_espip6_spec - flow specification for IPsec/IPv6 * @ip6src: Source host * @ip6dst: Destination host @@ -807,13 +849,13 @@ struct ethtool_usrip6_spec { union ethtool_flow_union { struct ethtool_tcpip4_spec tcp_ip4_spec; struct ethtool_tcpip4_spec udp_ip4_spec; - struct ethtool_tcpip4_spec sctp_ip4_spec; + struct ethtool_sctpip4_spec sctp_ip4_spec; struct ethtool_ah_espip4_spec ah_ip4_spec; struct ethtool_ah_espip4_spec esp_ip4_spec; struct ethtool_usrip4_spec usr_ip4_spec; struct ethtool_tcpip6_spec tcp_ip6_spec; struct ethtool_tcpip6_spec udp_ip6_spec; - struct ethtool_tcpip6_spec sctp_ip6_spec; + struct ethtool_sctpip6_spec sctp_ip6_spec; struct ethtool_ah_espip6_spec ah_ip6_spec; struct ethtool_ah_espip6_spec esp_ip6_spec; struct ethtool_usrip6_spec usr_ip6_spec;