On 1/12/18 8:46 AM, Jiri Pirko wrote:
> From: Jiri Pirko <j...@mellanox.com>
> 
> Add simple block get operation which primary purpose is to check the
> block existence by block index.
> 
> Signed-off-by: Jiri Pirko <j...@mellanox.com>
> ---
> v6->v7:
> - new patch
> ---
>  include/uapi/linux/rtnetlink.h |  6 ++++
>  net/sched/cls_api.c            | 64 
> ++++++++++++++++++++++++++++++++++++++++++
>  security/selinux/nlmsgtab.c    |  5 +++-
>  3 files changed, 74 insertions(+), 1 deletion(-)
> 
> diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h
> index da878f2..4b1f626 100644
> --- a/include/uapi/linux/rtnetlink.h
> +++ b/include/uapi/linux/rtnetlink.h
> @@ -150,6 +150,12 @@ enum {
>       RTM_NEWCACHEREPORT = 96,
>  #define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT
>  
> +     RTM_NEWBLOCK = 100,
> +#define RTM_NEWBLOCK RTM_NEWBLOCK
> +     RTM_DELBLOCK,
> +#define RTM_DELBLOCK RTM_DELBLOCK
> +     RTM_GETBLOCK,
> +#define RTM_GETBLOCK RTM_GETBLOCK
>       __RTM_MAX,
>  #define RTM_MAX              (((__RTM_MAX + 3) & ~3) - 1)
>  };
> diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
> index d687e58..14e4f20 100644
> --- a/net/sched/cls_api.c
> +++ b/net/sched/cls_api.c
> @@ -1553,6 +1553,69 @@ int tc_setup_cb_call(struct tcf_block *block, struct 
> tcf_exts *exts,
>  }
>  EXPORT_SYMBOL(tc_setup_cb_call);
>  
> +static int block_notify_fill(struct net *net, struct sk_buff *skb,
> +                          struct tcf_block *block, u32 portid, u32 seq,
> +                          u16 flags, int event)
> +{
> +     struct nlmsghdr *nlh;
> +     struct tcmsg *tcm;
> +
> +     nlh = nlmsg_put(skb, portid, seq, event, sizeof(*tcm), flags);
> +     if (!nlh)
> +             return -EMSGSIZE;
> +     tcm = nlmsg_data(nlh);
> +     memset(tcm, 0, sizeof(*tcm));
> +     tcm->tcm_family = AF_UNSPEC;
> +     tcm->tcm_ifindex = TCM_IFINDEX_MAGIC_BLOCK;
> +     tcm->tcm_block_index = block->index;
> +     return 0;
> +}

Why can't this be done with RTM_GETQDISC?

Reply via email to