net/smc: move some definitions to UAPI
v2 cover net/smc: move some definitions to UAPI
Hello.
As of now, it's a bit difficult to use SMC protocol, as significant part of definitions related to it are defined in private headers and are not part of UAPI. The following commits move some definitions to UAPI, making them readily available to the user space.
Changes since v1[1]:
* Patch "provide fallback diagnostic codes in UAPI" is updated in accordance with the updated set of diagnostic codes.
[1] https://lkml.org/lkml/2018/10/7/177
Eugene Syromiatnikov (3):
uapi, net/smc: move protocol constant definitions to UAPI uapi, net/smc: provide fallback diagnostic codes in UAPI uapi, net/smc: provide socket state constants in UAPI
include/uapi/linux/smc.h | 32 +++++++++++++++++++++++++++++++- include/uapi/linux/smc_diag.h | 17 +++++++++++++++++ net/smc/smc.h | 22 ++-------------------- net/smc/smc_clc.h | 22 ---------------------- 4 files changed, 50 insertions(+), 43 deletions(-)
Signature · 1 line
2.1.4
PATCH v2 1/3 uapi, net/smc: move protocol constant definitions to UAPI
SMCPROTO_* constants are expected to be used by userspace[1], but they were defined in a private header instead.
[1] http://manpages.ubuntu.com/manpages/cosmic/man7/af_smc.7.html
--- include/uapi/linux/smc.h | 7 ++++++- net/smc/smc.h | 4 +--- 2 files changed, 7 insertions(+), 4 deletions(-)
include/uapi/linux/smc.h +6 -1
@@ -2,7 +2,8 @@/* * Shared Memory Communications over RDMA (SMC-R) and RoCE * -* Definitions for generic netlink based configuration of an SMC-R PNET table +* Definitions for SMC protocol and generic netlink based configuration +* of an SMC-R PNET table * * Copyright IBM Corp. 2016 *
@@ -12,6 +13,10 @@#ifndef _UAPI_LINUX_SMC_H_#define _UAPI_LINUX_SMC_H_ +/* AF_SMC socket protocols */ +#define SMCPROTO_SMC 0/* SMC protocol, IPv4 */ +#define SMCPROTO_SMC6 1/* SMC protocol, IPv6 */ +/* Netlink SMC_PNETID attributes */ enum { SMC_PNETID_UNSPEC,
net/smc/smc.h +1 -3
@@ -15,12 +15,10 @@#include <linux/types.h> #include <linux/compiler.h> /* __aligned */ #include <net/sock.h> +#include <linux/smc.h> #include "smc_ib.h" -#define SMCPROTO_SMC 0/* SMC protocol, IPv4 */ -#define SMCPROTO_SMC6 1/* SMC protocol, IPv6 */ -extern struct proto smc_proto;extern struct proto smc_proto6;
Signature · 1 line
2.1.4
PATCH v2 2/3 uapi, net/smc: provide fallback diagnostic codes in UAPI
In reply to Eugene SyromiatnikovSince the values to which these codes are corresponding to are already exposed via sock_diag interface.
--- include/uapi/linux/smc.h | 25 +++++++++++++++++++++++++ net/smc/smc_clc.h | 22 ---------------------- 2 files changed, 25 insertions(+), 22 deletions(-)
include/uapi/linux/smc.h +25 -0
@@ -17,6 +17,31 @@#define SMCPROTO_SMC 0/* SMC protocol, IPv4 */ #define SMCPROTO_SMC6 1/* SMC protocol, IPv6 */ +/* Diagnostic codes */ +#define SMC_CLC_DECL_MEM 0x01010000/* insufficient memory resources */ +#define SMC_CLC_DECL_TIMEOUT_CL 0x02010000/* timeout w4 QP confirm link */ +#define SMC_CLC_DECL_TIMEOUT_AL 0x02020000/* timeout w4 QP add link */ +#define SMC_CLC_DECL_CNFERR 0x03000000/* configuration error */ +#define SMC_CLC_DECL_PEERNOSMC 0x03010000/* peer did not indicate SMC */ +#define SMC_CLC_DECL_IPSEC 0x03020000/* IPsec usage */ +#define SMC_CLC_DECL_NOSMCDEV 0x03030000/* no SMC device found (R or D) */ +#define SMC_CLC_DECL_NOSMCDDEV 0x03030001/* no SMC-D device found */ +#define SMC_CLC_DECL_NOSMCRDEV 0x03030002/* no SMC-R device found */ +#define SMC_CLC_DECL_SMCDNOTALK 0x03030003/* SMC-D dev can't talk to peer */ +#define SMC_CLC_DECL_MODEUNSUPP 0x03040000/* smc modes do not match (R or D)*/ +#define SMC_CLC_DECL_RMBE_EC 0x03050000/* peer has eyecatcher in RMBE */ +#define SMC_CLC_DECL_OPTUNSUPP 0x03060000/* fastopen sockopt not supported */ +#define SMC_CLC_DECL_DIFFPREFIX 0x03070000/* IP prefix / subnet mismatch */ +#define SMC_CLC_DECL_GETVLANERR 0x03080000/* err to get vlan id of ip device*/ +#define SMC_CLC_DECL_ISMVLANERR 0x03090000/* err to reg vlan id on ism dev */ +#define SMC_CLC_DECL_SYNCERR 0x04000000/* synchronization error */ +#define SMC_CLC_DECL_PEERDECL 0x05000000/* peer declined during handshake */ +#define SMC_CLC_DECL_INTERR 0x09990000/* internal error */ +#define SMC_CLC_DECL_ERR_RTOK 0x09990001/* rtoken handling failed */ +#define SMC_CLC_DECL_ERR_RDYLNK 0x09990002/* ib ready link failed */ +#define SMC_CLC_DECL_ERR_REGRMB 0x09990003/* reg rmb failed */ + +/* Netlink SMC_PNETID attributes */ enum {SMC_PNETID_UNSPEC ,
net/smc/smc_clc.h +0 -22
@@ -28,28 +28,6 @@#define SMC_TYPE_B 3/* SMC-R and SMC-D */ #define CLC_WAIT_TIME (6 * HZ)/* max. wait time on clcsock */ #define CLC_WAIT_TIME_SHORT HZ/* short wait time on clcsock */ -#define SMC_CLC_DECL_MEM 0x01010000/* insufficient memory resources */ -#define SMC_CLC_DECL_TIMEOUT_CL 0x02010000/* timeout w4 QP confirm link */ -#define SMC_CLC_DECL_TIMEOUT_AL 0x02020000/* timeout w4 QP add link */ -#define SMC_CLC_DECL_CNFERR 0x03000000/* configuration error */ -#define SMC_CLC_DECL_PEERNOSMC 0x03010000/* peer did not indicate SMC */ -#define SMC_CLC_DECL_IPSEC 0x03020000/* IPsec usage */ -#define SMC_CLC_DECL_NOSMCDEV 0x03030000/* no SMC device found (R or D) */ -#define SMC_CLC_DECL_NOSMCDDEV 0x03030001/* no SMC-D device found */ -#define SMC_CLC_DECL_NOSMCRDEV 0x03030002/* no SMC-R device found */ -#define SMC_CLC_DECL_SMCDNOTALK 0x03030003/* SMC-D dev can't talk to peer */ -#define SMC_CLC_DECL_MODEUNSUPP 0x03040000/* smc modes do not match (R or D)*/ -#define SMC_CLC_DECL_RMBE_EC 0x03050000/* peer has eyecatcher in RMBE */ -#define SMC_CLC_DECL_OPTUNSUPP 0x03060000/* fastopen sockopt not supported */ -#define SMC_CLC_DECL_DIFFPREFIX 0x03070000/* IP prefix / subnet mismatch */ -#define SMC_CLC_DECL_GETVLANERR 0x03080000/* err to get vlan id of ip device*/ -#define SMC_CLC_DECL_ISMVLANERR 0x03090000/* err to reg vlan id on ism dev */ -#define SMC_CLC_DECL_SYNCERR 0x04000000/* synchronization error */ -#define SMC_CLC_DECL_PEERDECL 0x05000000/* peer declined during handshake */ -#define SMC_CLC_DECL_INTERR 0x09990000/* internal error */ -#define SMC_CLC_DECL_ERR_RTOK 0x09990001/* rtoken handling failed */ -#define SMC_CLC_DECL_ERR_RDYLNK 0x09990002/* ib ready link failed */ -#define SMC_CLC_DECL_ERR_REGRMB 0x09990003/* reg rmb failed */ struct smc_clc_msg_hdr {/* header1 of clc messages */ u8 eyecatcher[4 ];/* eye catcher */
Signature · 1 line
2.1.4
PATCH v2 3/3 uapi, net/smc: provide socket state constants in UAPI
In reply to Eugene SyromiatnikovAs socket state itself is already exposed via sock_diag interface.
--- include/uapi/linux/smc_diag.h | 17 +++++++++++++++++ net/smc/smc.h | 18 +----------------- 2 files changed, 18 insertions(+), 17 deletions(-)
include/uapi/linux/smc_diag.h +17 -0
@@ -31,6 +31,23 @@ struct smc_diag_msg {__aligned_u64 diag_inode; }; +enum smc_state {/* possible states of an SMC socket */ +SMC_ACTIVE =1 , +SMC_INIT =2 , +SMC_CLOSED =7 , +SMC_LISTEN =10 , +/* normal close */ +SMC_PEERCLOSEWAIT1 =20 , +SMC_PEERCLOSEWAIT2 =21 , +SMC_APPFINCLOSEWAIT =24 , +SMC_APPCLOSEWAIT1 =22 , +SMC_APPCLOSEWAIT2 =23 , +SMC_PEERFINCLOSEWAIT =25 , +/* abnormal close */ +SMC_PEERABORTWAIT =26 , +SMC_PROCESSABORT =27 , +}; +/* Mode of a connection */ enum {SMC_DIAG_MODE_SMCR ,
net/smc/smc.h +1 -17
@@ -16,6 +16,7 @@#include <linux/compiler.h> /* __aligned */ #include <net/sock.h> #include <linux/smc.h> +#include <linux/smc_diag.h> #include "smc_ib.h"
@@ -26,23 +27,6 @@ extern struct proto smc_proto6;#define KERNEL_HAS_ATOMIC64 #endif -enum smc_state {/* possible states of an SMC socket */ -SMC_ACTIVE =1 , -SMC_INIT =2 , -SMC_CLOSED =7 , -SMC_LISTEN =10 , -/* normal close */ -SMC_PEERCLOSEWAIT1 =20 , -SMC_PEERCLOSEWAIT2 =21 , -SMC_APPFINCLOSEWAIT =24 , -SMC_APPCLOSEWAIT1 =22 , -SMC_APPCLOSEWAIT2 =23 , -SMC_PEERFINCLOSEWAIT =25 , -/* abnormal close */ -SMC_PEERABORTWAIT =26 , -SMC_PROCESSABORT =27 , -}; -struct smc_link_group ;struct smc_wr_rx_hdr {/* common prefix part of LLC and CDC to demultiplex */
Signature · 1 line
2.1.4
Quoted 7 lines · Eugene Syromiatnikov
Hello.
As of now, it's a bit difficult to use SMC protocol, as significant part of definitions related to it are defined in private headers and are not part of UAPI. The following commits move some definitions to UAPI, making them readily available to the user space.
Quoted 6 lines
Changes since v1[1]:
* Patch "provide fallback diagnostic codes in UAPI" is updated in accordance with the updated set of diagnostic codes.
Thanks Eugene, your patches look good. They will be part of our next SMC patch submission for the net-next tree.
Regards, Ursula
Quoted 11 lines
Eugene Syromiatnikov (3):
uapi, net/smc: move protocol constant definitions to UAPI uapi, net/smc: provide fallback diagnostic codes in UAPI uapi, net/smc: provide socket state constants in UAPIinclude/uapi/linux/smc.h | 32 +++++++++++++++++++++++++++++++- include/uapi/linux/smc_diag.h | 17 +++++++++++++++++ net/smc/smc.h | 22 ++-------------------- net/smc/smc_clc.h | 22 ---------------------- 4 files changed, 50 insertions(+), 43 deletions(-)
David Miller
maintainerFrom: Eugene Syromiatnikov <[email protected]>
Date: Fri, 20 Sep 2019 17:41:47 +0200
Quoted 10 lines
As of now, it's a bit difficult to use SMC protocol, as significant part of definitions related to it are defined in private headers and are not part of UAPI. The following commits move some definitions to UAPI, making them readily available to the user space.
Changes since v1[1]:
* Patch "provide fallback diagnostic codes in UAPI" is updated in accordance with the updated set of diagnostic codes.
Isn't it way too late for this?
These definitions will now be duplicates for userland code that defines the values on their own.
Quoted 12 lines · David Miller
From: Eugene Syromiatnikov <[email protected]>
Date: Fri, 20 Sep 2019 17:41:47 +0200Quoted 9 lines
As of now, it's a bit difficult to use SMC protocol, as significant part of definitions related to it are defined in private headers and are not part of UAPI. The following commits move some definitions to UAPI, making them readily available to the user space.
Changes since v1[1]:
* Patch "provide fallback diagnostic codes in UAPI" is updated in accordance with the updated set of diagnostic codes.
Quoted 7 lines
Quoted 1 line
Isn't it way too late for this?
These definitions will now be duplicates for userland code that defines the values on their own.
Dave,
we have to admit that it is already late for these patches. Nevertheless we think it is better to come up with them now than never. We doubt there exists already much userland code for it - except our own IBM-provided package smc-tools. Thus we appreciate acceptance of these patches.
Kind regards, Ursula
David Miller
maintainerFrom: Ursula Braun <[email protected]>
Date: Wed, 25 Sep 2019 14:10:05 +0200
Quoted 4 lines
we have to admit that it is already late for these patches. Nevertheless we think it is better to come up with them now than never. We doubt there exists already much userland code for it - except our own IBM-provided package smc-tools. Thus we appreciate acceptance of these patches.
Ursula, it's going to break the build of userland code.
I consider that unacceptable.