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. Acked-by: Jon Maloy <jon.ma...@ericsson.com> Signed-off-by: GhantaKrishnamurthy MohanKrishna <mohan.krishna.ghanta.krishnamur...@ericsson.com> --- 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..05dc84aa8ded 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 = get_opt(opts, "media"); + + if (!opt) { + 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 = cmd_get_media_type(cmd, cmdl, opts); + + if (!media) + 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 = cmd_get_media_type(cmd, cmdl, opts); + + if (!media) + 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