RE: [PATCH net v2] net/ncsi: Extend NC-SI Netlink interface to allow user space to send NC-SI command
Hi Sam, Sure, I will generate v3 after Vijay's patch is approved. Thanks, Justin > On Fri, 2018-09-28 at 18:15 +, justin.l...@dell.com wrote: > > The new command (NCSI_CMD_SEND_CMD) is added to allow user space > > application > > to send NC-SI command to the network card. > > Also, add a new attribute (NCSI_ATTR_DATA) for transferring request and > > response. > > > > The work flow is as below. > > > > Request: > > User space application -> Netlink interface (msg) > > -> new Netlink handler - > > ncsi_send_cmd_nl() > > -> ncsi_xmit_cmd() > > Response: > > Response received - ncsi_rcv_rsp() -> internal response handler - > > ncsi_rsp_handler_xxx() > > -> > > ncsi_rsp_handler_netlink() > > -> > > ncsi_send_netlink_rsp () > > -> > > Netlink interface (msg) > > -> > > user space application > > Command timeout - ncsi_request_timeout() -> ncsi_send_netlink_timeout () > > > > -> Netlink interface (msg with zero data length) > > > > -> user space application > > Error: > > Error detected -> ncsi_send_netlink_err () -> Netlink interface (err msg) > > > >-> user space application > > > > > > Signed-off-by: Justin Lee > > Hi Justin, > > This is looking pretty good, combined with Vijay's base patch the two > approaches should fit together nicely ( > http://patchwork.ozlabs.org/patch/976510/). > > A good merge order would probably be the above patch first, then this > patch and Vijay's further OEM patches based on top of that to reduce > conflicts. > > Cheers, > Sam
Re: [PATCH net v2] net/ncsi: Extend NC-SI Netlink interface to allow user space to send NC-SI command
On Fri, 2018-09-28 at 18:15 +, justin.l...@dell.com wrote: > The new command (NCSI_CMD_SEND_CMD) is added to allow user space application > to send NC-SI command to the network card. > Also, add a new attribute (NCSI_ATTR_DATA) for transferring request and > response. > > The work flow is as below. > > Request: > User space application -> Netlink interface (msg) > -> new Netlink handler - > ncsi_send_cmd_nl() > -> ncsi_xmit_cmd() > Response: > Response received - ncsi_rcv_rsp() -> internal response handler - > ncsi_rsp_handler_xxx() > -> > ncsi_rsp_handler_netlink() > -> > ncsi_send_netlink_rsp () > -> > Netlink interface (msg) > -> > user space application > Command timeout - ncsi_request_timeout() -> ncsi_send_netlink_timeout () > > -> Netlink interface (msg with zero data length) > > -> user space application > Error: > Error detected -> ncsi_send_netlink_err () -> Netlink interface (err msg) > > -> user space application > > > Signed-off-by: Justin Lee Hi Justin, This is looking pretty good, combined with Vijay's base patch the two approaches should fit together nicely ( http://patchwork.ozlabs.org/patch/976510/). A good merge order would probably be the above patch first, then this patch and Vijay's further OEM patches based on top of that to reduce conflicts. Cheers, Sam > > --- > include/uapi/linux/ncsi.h | 3 + > net/ncsi/internal.h | 12 ++- > net/ncsi/ncsi-cmd.c | 47 ++- > net/ncsi/ncsi-manage.c| 22 + > net/ncsi/ncsi-netlink.c | 205 > ++ > net/ncsi/ncsi-netlink.h | 12 +++ > net/ncsi/ncsi-rsp.c | 71 ++-- > 7 files changed, 363 insertions(+), 9 deletions(-) > > diff --git a/include/uapi/linux/ncsi.h b/include/uapi/linux/ncsi.h > index 4c292ec..4992bfc 100644 > --- a/include/uapi/linux/ncsi.h > +++ b/include/uapi/linux/ncsi.h > @@ -30,6 +30,7 @@ enum ncsi_nl_commands { > NCSI_CMD_PKG_INFO, > NCSI_CMD_SET_INTERFACE, > NCSI_CMD_CLEAR_INTERFACE, > + NCSI_CMD_SEND_CMD, > > __NCSI_CMD_AFTER_LAST, > NCSI_CMD_MAX = __NCSI_CMD_AFTER_LAST - 1 > @@ -43,6 +44,7 @@ enum ncsi_nl_commands { > * @NCSI_ATTR_PACKAGE_LIST: nested array of NCSI_PKG_ATTR attributes > * @NCSI_ATTR_PACKAGE_ID: package ID > * @NCSI_ATTR_CHANNEL_ID: channel ID > + * @NCSI_ATTR_DATA: command payload > * @NCSI_ATTR_MAX: highest attribute number > */ > enum ncsi_nl_attrs { > @@ -51,6 +53,7 @@ enum ncsi_nl_attrs { > NCSI_ATTR_PACKAGE_LIST, > NCSI_ATTR_PACKAGE_ID, > NCSI_ATTR_CHANNEL_ID, > + NCSI_ATTR_DATA, > > __NCSI_ATTR_AFTER_LAST, > NCSI_ATTR_MAX = __NCSI_ATTR_AFTER_LAST - 1 > diff --git a/net/ncsi/internal.h b/net/ncsi/internal.h > index 8055e39..1a3ef9e 100644 > --- a/net/ncsi/internal.h > +++ b/net/ncsi/internal.h > @@ -171,6 +171,8 @@ struct ncsi_package; > #define NCSI_RESERVED_CHANNEL0x1f > #define NCSI_CHANNEL_INDEX(c)((c) & ((1 << NCSI_PACKAGE_SHIFT) - 1)) > #define NCSI_TO_CHANNEL(p, c)(((p) << NCSI_PACKAGE_SHIFT) | (c)) > +#define NCSI_MAX_PACKAGE 8 > +#define NCSI_MAX_CHANNEL 32 > > struct ncsi_channel { > unsigned char id; > @@ -215,12 +217,17 @@ struct ncsi_request { > unsigned charid; /* Request ID - 0 to 255 */ > bool used;/* Request that has been assigned */ > unsigned int flags; /* NCSI request property */ > -#define NCSI_REQ_FLAG_EVENT_DRIVEN 1 > +#define NCSI_REQ_FLAG_EVENT_DRIVEN 1 > +#define NCSI_REQ_FLAG_NETLINK_DRIVEN 2 > struct ncsi_dev_priv *ndp;/* Associated NCSI device */ > struct sk_buff *cmd;/* Associated NCSI command packet */ > struct sk_buff *rsp;/* Associated NCSI response packet */ > struct timer_listtimer; /* Timer on waiting for response */ > bool enabled; /* Time has been enabled or not*/ > + > + u32 snd_seq; /* netlink sending sequence number */ > + u32 snd_portid; /* netlink portid of sender*/ > + struct nlmsghdr nlhdr; /* netlink message header */ > }; > > enum { > @@ -305,6 +312,9 @@ struct ncsi_cmd_arg { >
Re: [PATCH net v2] net/ncsi: Extend NC-SI Netlink interface to allow user space to send NC-SI command
>On 9/28/18, 11:16 AM, "justin.l...@dell.com" wrote: > The new command (NCSI_CMD_SEND_CMD) is added to allow user space application > to send NC-SI command to the network card. > Also, add a new attribute (NCSI_ATTR_DATA) for transferring request and response. > > The work flow is as below. > > Request: > User space application -> Netlink interface (msg) -> new Netlink handler - ncsi_send_cmd_nl() -> ncsi_xmit_cmd() > Response: > Response received - ncsi_rcv_rsp() -> internal response handler - ncsi_rsp_handler_xxx() -> ncsi_rsp_handler_netlink() -> ncsi_send_netlink_rsp () -> Netlink interface (msg) -> user space application > Command timeout - ncsi_request_timeout() -> ncsi_send_netlink_timeout () -> Netlink interface (msg with zero data length) -> user space application > Error: > Error detected -> ncsi_send_netlink_err () -> Netlink interface (err msg) -> user space application I will request to keep 2 patch, one for OEM handler and other one for netlink user space handling.
[PATCH net v2] net/ncsi: Extend NC-SI Netlink interface to allow user space to send NC-SI command
The new command (NCSI_CMD_SEND_CMD) is added to allow user space application to send NC-SI command to the network card. Also, add a new attribute (NCSI_ATTR_DATA) for transferring request and response. The work flow is as below. Request: User space application -> Netlink interface (msg) -> new Netlink handler - ncsi_send_cmd_nl() -> ncsi_xmit_cmd() Response: Response received - ncsi_rcv_rsp() -> internal response handler - ncsi_rsp_handler_xxx() -> ncsi_rsp_handler_netlink() -> ncsi_send_netlink_rsp () -> Netlink interface (msg) -> user space application Command timeout - ncsi_request_timeout() -> ncsi_send_netlink_timeout () -> Netlink interface (msg with zero data length) -> user space application Error: Error detected -> ncsi_send_netlink_err () -> Netlink interface (err msg) -> user space application Signed-off-by: Justin Lee --- include/uapi/linux/ncsi.h | 3 + net/ncsi/internal.h | 12 ++- net/ncsi/ncsi-cmd.c | 47 ++- net/ncsi/ncsi-manage.c| 22 + net/ncsi/ncsi-netlink.c | 205 ++ net/ncsi/ncsi-netlink.h | 12 +++ net/ncsi/ncsi-rsp.c | 71 ++-- 7 files changed, 363 insertions(+), 9 deletions(-) diff --git a/include/uapi/linux/ncsi.h b/include/uapi/linux/ncsi.h index 4c292ec..4992bfc 100644 --- a/include/uapi/linux/ncsi.h +++ b/include/uapi/linux/ncsi.h @@ -30,6 +30,7 @@ enum ncsi_nl_commands { NCSI_CMD_PKG_INFO, NCSI_CMD_SET_INTERFACE, NCSI_CMD_CLEAR_INTERFACE, + NCSI_CMD_SEND_CMD, __NCSI_CMD_AFTER_LAST, NCSI_CMD_MAX = __NCSI_CMD_AFTER_LAST - 1 @@ -43,6 +44,7 @@ enum ncsi_nl_commands { * @NCSI_ATTR_PACKAGE_LIST: nested array of NCSI_PKG_ATTR attributes * @NCSI_ATTR_PACKAGE_ID: package ID * @NCSI_ATTR_CHANNEL_ID: channel ID + * @NCSI_ATTR_DATA: command payload * @NCSI_ATTR_MAX: highest attribute number */ enum ncsi_nl_attrs { @@ -51,6 +53,7 @@ enum ncsi_nl_attrs { NCSI_ATTR_PACKAGE_LIST, NCSI_ATTR_PACKAGE_ID, NCSI_ATTR_CHANNEL_ID, + NCSI_ATTR_DATA, __NCSI_ATTR_AFTER_LAST, NCSI_ATTR_MAX = __NCSI_ATTR_AFTER_LAST - 1 diff --git a/net/ncsi/internal.h b/net/ncsi/internal.h index 8055e39..1a3ef9e 100644 --- a/net/ncsi/internal.h +++ b/net/ncsi/internal.h @@ -171,6 +171,8 @@ struct ncsi_package; #define NCSI_RESERVED_CHANNEL 0x1f #define NCSI_CHANNEL_INDEX(c) ((c) & ((1 << NCSI_PACKAGE_SHIFT) - 1)) #define NCSI_TO_CHANNEL(p, c) (((p) << NCSI_PACKAGE_SHIFT) | (c)) +#define NCSI_MAX_PACKAGE 8 +#define NCSI_MAX_CHANNEL 32 struct ncsi_channel { unsigned char id; @@ -215,12 +217,17 @@ struct ncsi_request { unsigned charid; /* Request ID - 0 to 255 */ bool used;/* Request that has been assigned */ unsigned int flags; /* NCSI request property */ -#define NCSI_REQ_FLAG_EVENT_DRIVEN 1 +#define NCSI_REQ_FLAG_EVENT_DRIVEN 1 +#define NCSI_REQ_FLAG_NETLINK_DRIVEN 2 struct ncsi_dev_priv *ndp;/* Associated NCSI device */ struct sk_buff *cmd;/* Associated NCSI command packet */ struct sk_buff *rsp;/* Associated NCSI response packet */ struct timer_listtimer; /* Timer on waiting for response */ bool enabled; /* Time has been enabled or not*/ + + u32 snd_seq; /* netlink sending sequence number */ + u32 snd_portid; /* netlink portid of sender*/ + struct nlmsghdr nlhdr; /* netlink message header */ }; enum { @@ -305,6 +312,9 @@ struct ncsi_cmd_arg { unsigned short words[8]; unsigned int dwords[4]; }; + + unsigned char*data; /* Netlink data */ + struct genl_info *info; /* Netlink information */ }; extern struct list_head ncsi_dev_list; diff --git a/net/ncsi/ncsi-cmd.c b/net/ncsi/ncsi-cmd.c index 7567ca63..43b544c 100644 --- a/net/ncsi/ncsi-cmd.c +++ b/net/ncsi/ncsi-cmd.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "internal.h" #include "ncsi-pkt.h" @@ -211,6 +212,39 @@ static int