Acked-by: Jon Maloy <[email protected]>

///j

> -----Original Message-----
> From: Mohan Krishna Ghanta Krishnamurthy
> Sent: Tuesday, April 10, 2018 06:05
> To: [email protected]; Jon Maloy
> <[email protected]>; [email protected];
> [email protected]; Mohan Krishna Ghanta Krishnamurthy
> <[email protected]>
> Subject: [iproute2-next 1/1] tipc: Add support to set and get MTU for UDP
> bearer
> 
> In this commit we introduce the ability to set and get MTU for UDP media
> and bearer.
> 
> For set and get properties such as tolerance, window and priority, we already
> do:
> 
>     $ tipc media set PPROPERTY media MEDIA
>     $ tipc media get PPROPERTY media MEDIA
> 
>     $ tipc bearer set OPTION media MEDIA ARGS
>     $ tipc bearer get [OPTION] media MEDIA ARGS
> 
> The same has been extended for MTU, with an exception to support only
> media type UDP.
> 
> Signed-off-by: GhantaKrishnamurthy MohanKrishna
> <[email protected]>
> ---
>  tipc/bearer.c | 55
> ++++++++++++++++++++++++++++++++++++++++++++++---------
>  tipc/media.c  | 24 ++++++++++++++++++++++--
>  2 files changed, 68 insertions(+), 11 deletions(-)
> 
> diff --git a/tipc/bearer.c b/tipc/bearer.c index 0d8457015062..27e8d77f5635
> 100644
> --- a/tipc/bearer.c
> +++ b/tipc/bearer.c
> @@ -42,7 +42,8 @@ static void _print_bearer_opts(void)
>               "OPTIONS\n"
>               " priority              - Bearer link priority\n"
>               " tolerance             - Bearer link tolerance\n"
> -             " window                - Bearer link window\n");
> +             " window                - Bearer link window\n"
> +             " mtu                   - Bearer link mtu\n");
>  }
> 
>  void print_bearer_media(void)
> @@ -194,6 +195,21 @@ static int nl_add_udp_enable_opts(struct nlmsghdr
> *nlh, struct opt *opts,
>       return 0;
>  }
> 
> +static char *cmd_get_media_type(const struct cmd *cmd, struct cmdl
> *cmdl,
> +                             struct opt *opts)
> +{
> +     struct opt *opt;
> +
> +     if (!(opt = get_opt(opts, "media"))) {
> +             if (help_flag)
> +                     (cmd->help)(cmdl);
> +             else
> +                     fprintf(stderr, "error, missing bearer media\n");
> +             return NULL;
> +     }
> +     return opt->val;
> +}
> +
>  static int nl_add_bearer_name(struct nlmsghdr *nlh, const struct cmd *cmd,
>                             struct cmdl *cmdl, struct opt *opts,
>                             const struct tipc_sup_media *sup_media) @@ -
> 217,15 +233,8 @@ int cmd_get_unique_bearer_name(const struct cmd
> *cmd, struct cmdl *cmdl,
>       struct opt *opt;
>       const struct tipc_sup_media *entry;
> 
> -
> -     if (!(opt = get_opt(opts, "media"))) {
> -             if (help_flag)
> -                     (cmd->help)(cmdl);
> -             else
> -                     fprintf(stderr, "error, missing bearer media\n");
> +     if (!(media = cmd_get_media_type(cmd, cmdl, opts)))
>               return -EINVAL;
> -     }
> -     media = opt->val;
> 
>       for (entry = sup_media; entry->media; entry++) {
>               if (strcmp(entry->media, media))
> @@ -559,6 +568,8 @@ static int cmd_bearer_set_prop(struct nlmsghdr *nlh,
> const struct cmd *cmd,
>               prop = TIPC_NLA_PROP_TOL;
>       else if ((strcmp(cmd->cmd, "window") == 0))
>               prop = TIPC_NLA_PROP_WIN;
> +     else if ((strcmp(cmd->cmd, "mtu") == 0))
> +             prop = TIPC_NLA_PROP_MTU;
>       else
>               return -EINVAL;
> 
> @@ -571,6 +582,17 @@ static int cmd_bearer_set_prop(struct nlmsghdr
> *nlh, const struct cmd *cmd,
>       if (parse_opts(opts, cmdl) < 0)
>               return -EINVAL;
> 
> +     if (prop == TIPC_NLA_PROP_MTU) {
> +             char *media;
> +
> +             if (!(media = cmd_get_media_type(cmd, cmdl, opts)))
> +                     return -EINVAL;
> +             else if (strcmp(media, "udp")) {
> +                     fprintf(stderr, "error, not supported for media\n");
> +                     return -EINVAL;
> +             }
> +     }
> +
>       if (!(nlh = msg_init(buf, TIPC_NL_BEARER_SET))) {
>               fprintf(stderr, "error, message initialisation failed\n");
>               return -1;
> @@ -597,6 +619,7 @@ static int cmd_bearer_set(struct nlmsghdr *nlh, const
> struct cmd *cmd,
>               { "priority",   cmd_bearer_set_prop,
>       cmd_bearer_set_help },
>               { "tolerance",  cmd_bearer_set_prop,
>       cmd_bearer_set_help },
>               { "window",     cmd_bearer_set_prop,
>       cmd_bearer_set_help },
> +             { "mtu",        cmd_bearer_set_prop,
>       cmd_bearer_set_help },
>               { NULL }
>       };
> 
> @@ -877,12 +900,25 @@ static int cmd_bearer_get_prop(struct nlmsghdr
> *nlh, const struct cmd *cmd,
>               prop = TIPC_NLA_PROP_TOL;
>       else if ((strcmp(cmd->cmd, "window") == 0))
>               prop = TIPC_NLA_PROP_WIN;
> +     else if ((strcmp(cmd->cmd, "mtu") == 0))
> +             prop = TIPC_NLA_PROP_MTU;
>       else
>               return -EINVAL;
> 
>       if (parse_opts(opts, cmdl) < 0)
>               return -EINVAL;
> 
> +     if (prop == TIPC_NLA_PROP_MTU) {
> +             char *media;
> +
> +             if (!(media = cmd_get_media_type(cmd, cmdl, opts)))
> +                     return -EINVAL;
> +             else if (strcmp(media, "udp")) {
> +                     fprintf(stderr, "error, not supported for media\n");
> +                     return -EINVAL;
> +             }
> +     }
> +
>       if (!(nlh = msg_init(buf, TIPC_NL_BEARER_GET))) {
>               fprintf(stderr, "error, message initialisation failed\n");
>               return -1;
> @@ -904,6 +940,7 @@ static int cmd_bearer_get(struct nlmsghdr *nlh, const
> struct cmd *cmd,
>               { "priority",   cmd_bearer_get_prop,
>       cmd_bearer_get_help },
>               { "tolerance",  cmd_bearer_get_prop,
>       cmd_bearer_get_help },
>               { "window",     cmd_bearer_get_prop,
>       cmd_bearer_get_help },
> +             { "mtu",        cmd_bearer_get_prop,
>       cmd_bearer_get_help },
>               { "media",      cmd_bearer_get_media,
>       cmd_bearer_get_help },
>               { NULL }
>       };
> diff --git a/tipc/media.c b/tipc/media.c index 6e10c7e5d8e6..969ef6578b3b
> 100644
> --- a/tipc/media.c
> +++ b/tipc/media.c
> @@ -103,6 +103,8 @@ static int cmd_media_get_prop(struct nlmsghdr *nlh,
> const struct cmd *cmd,
>               prop = TIPC_NLA_PROP_TOL;
>       else if ((strcmp(cmd->cmd, "window") == 0))
>               prop = TIPC_NLA_PROP_WIN;
> +     else if ((strcmp(cmd->cmd, "mtu") == 0))
> +             prop = TIPC_NLA_PROP_MTU;
>       else
>               return -EINVAL;
> 
> @@ -123,6 +125,12 @@ static int cmd_media_get_prop(struct nlmsghdr
> *nlh, const struct cmd *cmd,
>               fprintf(stderr, "error, missing media\n");
>               return -EINVAL;
>       }
> +
> +     if ((prop == TIPC_NLA_PROP_MTU) &&
> +         (strcmp(opt->val, "udp"))) {
> +             fprintf(stderr, "error, not supported for media\n");
> +             return -EINVAL;
> +     }
>       nest = mnl_attr_nest_start(nlh, TIPC_NLA_MEDIA);
>       mnl_attr_put_strz(nlh, TIPC_NLA_MEDIA_NAME, opt->val);
>       mnl_attr_nest_end(nlh, nest);
> @@ -136,7 +144,8 @@ static void cmd_media_get_help(struct cmdl *cmdl)
>               "PROPERTIES\n"
>               " tolerance             - Get media tolerance\n"
>               " priority              - Get media priority\n"
> -             " window                - Get media window\n",
> +             " window                - Get media window\n"
> +             " mtu                   - Get media mtu\n",
>               cmdl->argv[0]);
>  }
> 
> @@ -147,6 +156,7 @@ static int cmd_media_get(struct nlmsghdr *nlh, const
> struct cmd *cmd,
>               { "priority",   cmd_media_get_prop,
>       cmd_media_get_help },
>               { "tolerance",  cmd_media_get_prop,
>       cmd_media_get_help },
>               { "window",     cmd_media_get_prop,
>       cmd_media_get_help },
> +             { "mtu",        cmd_media_get_prop,
>       cmd_media_get_help },
>               { NULL }
>       };
> 
> @@ -159,7 +169,8 @@ static void cmd_media_set_help(struct cmdl *cmdl)
>               "PROPERTIES\n"
>               " tolerance TOLERANCE   - Set media tolerance\n"
>               " priority PRIORITY     - Set media priority\n"
> -             " window WINDOW         - Set media window\n",
> +             " window WINDOW         - Set media window\n"
> +             " mtu MTU               - Set media mtu\n",
>               cmdl->argv[0]);
>  }
> 
> @@ -183,6 +194,8 @@ static int cmd_media_set_prop(struct nlmsghdr *nlh,
> const struct cmd *cmd,
>               prop = TIPC_NLA_PROP_TOL;
>       else if ((strcmp(cmd->cmd, "window") == 0))
>               prop = TIPC_NLA_PROP_WIN;
> +     else if ((strcmp(cmd->cmd, "mtu") == 0))
> +             prop = TIPC_NLA_PROP_MTU;
>       else
>               return -EINVAL;
> 
> @@ -210,6 +223,12 @@ static int cmd_media_set_prop(struct nlmsghdr
> *nlh, const struct cmd *cmd,
>               fprintf(stderr, "error, missing media\n");
>               return -EINVAL;
>       }
> +
> +     if ((prop == TIPC_NLA_PROP_MTU) &&
> +         (strcmp(opt->val, "udp"))) {
> +             fprintf(stderr, "error, not supported for media\n");
> +             return -EINVAL;
> +     }
>       mnl_attr_put_strz(nlh, TIPC_NLA_MEDIA_NAME, opt->val);
> 
>       props = mnl_attr_nest_start(nlh, TIPC_NLA_MEDIA_PROP); @@ -
> 228,6 +247,7 @@ static int cmd_media_set(struct nlmsghdr *nlh, const struct
> cmd *cmd,
>               { "priority",   cmd_media_set_prop,     cmd_media_set_help
> },
>               { "tolerance",  cmd_media_set_prop,     cmd_media_set_help
> },
>               { "window",     cmd_media_set_prop,     cmd_media_set_help
> },
> +             { "mtu",        cmd_media_set_prop,     cmd_media_set_help
> },
>               { NULL }
>       };
> 
> --
> 2.1.4


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
tipc-discussion mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tipc-discussion

Reply via email to