In this commit, we add a new function that appends the media and the bearer identifier in a generic way. We align the rest of the code to use this new function. There is no functional change.
Signed-off-by: Parthasarathy Bhuvaragan <parthasarathy.bhuvara...@ericsson.com> --- tipc/bearer.c | 150 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 77 insertions(+), 73 deletions(-) diff --git a/tipc/bearer.c b/tipc/bearer.c index 30b54d9fe24e..d6f1edf5b4c5 100644 --- a/tipc/bearer.c +++ b/tipc/bearer.c @@ -26,6 +26,9 @@ #include "msg.h" #include "bearer.h" +static int cmd_get_unique_bearer_name(const struct cmd *cmd, struct cmdl *cmdl, + struct opt *opts, char *bname); + static void _print_bearer_opts(void) { fprintf(stderr, @@ -67,22 +70,6 @@ static void cmd_bearer_enable_udp_help(struct cmdl *cmdl) cmdl->argv[0]); } -static int enable_l2_bearer(struct nlmsghdr *nlh, struct opt *opts, - struct cmdl *cmdl) -{ - struct opt *opt; - char id[TIPC_MAX_BEARER_NAME]; - - if (!(opt = get_opt(opts, "device"))) { - fprintf(stderr, "error: missing bearer device\n"); - return -EINVAL; - } - snprintf(id, sizeof(id), "eth:%s", opt->val); - mnl_attr_put_strz(nlh, TIPC_NLA_BEARER_NAME, id); - - return 0; -} - static int get_netid_cb(const struct nlmsghdr *nlh, void *data) { struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh); @@ -134,7 +121,6 @@ static int enable_udp_bearer(struct nlmsghdr *nlh, struct opt *opts, char *remport = "6118"; char *locip = NULL; char *remip = NULL; - char name[TIPC_MAX_BEARER_NAME]; struct addrinfo *loc = NULL; struct addrinfo *rem = NULL; struct addrinfo hints = { @@ -148,13 +134,6 @@ static int enable_udp_bearer(struct nlmsghdr *nlh, struct opt *opts, return -EINVAL; } - if (!(opt = get_opt(opts, "name"))) { - fprintf(stderr, "error, udp bearer name missing\n"); - cmd_bearer_enable_udp_help(cmdl); - return -EINVAL; - } - snprintf(name, sizeof(name), "udp:%s", opt->val); - if (!(opt = get_opt(opts, "localip"))) { fprintf(stderr, "error, udp bearer localip missing\n"); cmd_bearer_enable_udp_help(cmdl); @@ -197,8 +176,6 @@ static int enable_udp_bearer(struct nlmsghdr *nlh, struct opt *opts, return -EINVAL; } - mnl_attr_put_strz(nlh, TIPC_NLA_BEARER_NAME, name); - nest = mnl_attr_nest_start(nlh, TIPC_NLA_BEARER_UDP_OPTS); mnl_attr_put(nlh, TIPC_NLA_UDP_LOCAL, loc->ai_addrlen, loc->ai_addr); mnl_attr_put(nlh, TIPC_NLA_UDP_REMOTE, rem->ai_addrlen, rem->ai_addr); @@ -228,6 +205,7 @@ static int cmd_bearer_enable(struct nlmsghdr *nlh, const struct cmd *cmd, struct opt *opt; struct nlattr *nest; char buf[MNL_SOCKET_BUFFER_SIZE]; + char bname[TIPC_MAX_BEARER_NAME]; char *media; struct opt opts[] = { { "device", NULL }, @@ -257,6 +235,9 @@ static int cmd_bearer_enable(struct nlmsghdr *nlh, const struct cmd *cmd, } media = opt->val; + if ((err = cmd_get_unique_bearer_name(cmd, cmdl, opts, bname))) + return err; + if (!(nlh = msg_init(buf, TIPC_NL_BEARER_ENABLE))) { fprintf(stderr, "error: message initialisation failed\n"); return -1; @@ -274,6 +255,8 @@ static int cmd_bearer_enable(struct nlmsghdr *nlh, const struct cmd *cmd, mnl_attr_nest_end(nlh, props); } + mnl_attr_put_strz(nlh, TIPC_NLA_BEARER_NAME, bname); + if (strcmp(media, "udp") == 0) { if (help_flag) { cmd_bearer_enable_udp_help(cmdl); @@ -286,50 +269,15 @@ static int cmd_bearer_enable(struct nlmsghdr *nlh, const struct cmd *cmd, cmd_bearer_enable_l2_help(cmdl); return -EINVAL; } - if ((err = enable_l2_bearer(nlh, opts, cmdl))) - return err; } else { fprintf(stderr, "error, invalid media type \"%s\"\n", media); return -EINVAL; } - mnl_attr_nest_end(nlh, nest); return msg_doit(nlh, NULL, NULL); } -static int add_l2_bearer(struct nlmsghdr *nlh, struct opt *opts) -{ - struct opt *opt; - char id[TIPC_MAX_BEARER_NAME]; - - if (!(opt = get_opt(opts, "device"))) { - fprintf(stderr, "error: missing bearer device\n"); - return -EINVAL; - } - snprintf(id, sizeof(id), "eth:%s", opt->val); - - mnl_attr_put_strz(nlh, TIPC_NLA_BEARER_NAME, id); - - return 0; -} - -static int add_udp_bearer(struct nlmsghdr *nlh, struct opt *opts) -{ - struct opt *opt; - char id[TIPC_MAX_BEARER_NAME]; - - if (!(opt = get_opt(opts, "name"))) { - fprintf(stderr, "error: missing bearer name\n"); - return -EINVAL; - } - snprintf(id, sizeof(id), "udp:%s", opt->val); - - mnl_attr_put_strz(nlh, TIPC_NLA_BEARER_NAME, id); - - return 0; -} - static void cmd_bearer_disable_l2_help(struct cmdl *cmdl) { fprintf(stderr, "Usage: %s bearer disable media udp device DEVICE\n", @@ -355,6 +303,7 @@ static int cmd_bearer_disable(struct nlmsghdr *nlh, const struct cmd *cmd, int err; char *media; char buf[MNL_SOCKET_BUFFER_SIZE]; + char bname[TIPC_MAX_BEARER_NAME]; struct nlattr *nest; struct opt *opt; struct opt opts[] = { @@ -379,27 +328,27 @@ static int cmd_bearer_disable(struct nlmsghdr *nlh, const struct cmd *cmd, } media = opt->val; + if ((err = cmd_get_unique_bearer_name(cmd, cmdl, opts, bname))) + return err; + if (!(nlh = msg_init(buf, TIPC_NL_BEARER_DISABLE))) { fprintf(stderr, "error, message initialisation failed\n"); return -1; } nest = mnl_attr_nest_start(nlh, TIPC_NLA_BEARER); + mnl_attr_put_strz(nlh, TIPC_NLA_BEARER_NAME, bname); if (strcmp(media, "udp") == 0) { if (help_flag) { cmd_bearer_disable_udp_help(cmdl); return -EINVAL; } - if ((err = add_udp_bearer(nlh, opts))) - return err; } else if ((strcmp(media, "eth") == 0) || (strcmp(media, "udp") == 0)) { if (help_flag) { cmd_bearer_disable_l2_help(cmdl); return -EINVAL; } - if ((err = add_l2_bearer(nlh, opts))) - return err; } else { fprintf(stderr, "error, invalid media type \"%s\"\n", media); return -EINVAL; @@ -441,6 +390,7 @@ static int cmd_bearer_set_prop(struct nlmsghdr *nlh, const struct cmd *cmd, int prop; char *media; char buf[MNL_SOCKET_BUFFER_SIZE]; + char bname[TIPC_MAX_BEARER_NAME]; struct nlattr *props; struct nlattr *attrs; struct opt *opt; @@ -490,20 +440,21 @@ static int cmd_bearer_set_prop(struct nlmsghdr *nlh, const struct cmd *cmd, } media = opt->val; + if ((err = cmd_get_unique_bearer_name(cmd, cmdl, opts, bname))) + return err; + + mnl_attr_put_strz(nlh, TIPC_NLA_BEARER_NAME, bname); + if (strcmp(media, "udp") == 0) { if (help_flag) { cmd_bearer_set_udp_help(cmdl); return -EINVAL; } - if ((err = add_udp_bearer(nlh, opts))) - return err; } else if ((strcmp(media, "eth") == 0) || (strcmp(media, "udp") == 0)) { if (help_flag) { cmd_bearer_set_l2_help(cmdl, media); return -EINVAL; } - if ((err = add_l2_bearer(nlh, opts))) - return err; } else { fprintf(stderr, "error, invalid media type \"%s\"\n", media); return -EINVAL; @@ -581,6 +532,7 @@ static int cmd_bearer_get_prop(struct nlmsghdr *nlh, const struct cmd *cmd, int prop; char *media; char buf[MNL_SOCKET_BUFFER_SIZE]; + char bname[TIPC_MAX_BEARER_NAME]; struct nlattr *attrs; struct opt *opt; struct opt opts[] = { @@ -618,21 +570,22 @@ static int cmd_bearer_get_prop(struct nlmsghdr *nlh, const struct cmd *cmd, } media = opt->val; + if ((err = cmd_get_unique_bearer_name(cmd, cmdl, opts, bname))) + return err; + attrs = mnl_attr_nest_start(nlh, TIPC_NLA_BEARER); + mnl_attr_put_strz(nlh, TIPC_NLA_BEARER_NAME, bname); + if (strcmp(media, "udp") == 0) { if (help_flag) { cmd_bearer_get_udp_help(cmdl); return -EINVAL; } - if ((err = add_udp_bearer(nlh, opts))) - return err; } else if ((strcmp(media, "eth") == 0) || (strcmp(media, "udp") == 0)) { if (help_flag) { cmd_bearer_get_l2_help(cmdl, media); return -EINVAL; } - if ((err = add_l2_bearer(nlh, opts))) - return err; } else { fprintf(stderr, "error, invalid media type \"%s\"\n", media); return -EINVAL; @@ -696,6 +649,57 @@ static int cmd_bearer_list(struct nlmsghdr *nlh, const struct cmd *cmd, return msg_dumpit(nlh, bearer_list_cb, NULL); } +static int cmd_get_unique_bearer_name(const struct cmd *cmd, struct cmdl *cmdl, + struct opt *opts, char *bname) +{ + char *media; + char *identifier; + struct opt *opt; + struct tipc_bearer_identifier { + char *media; + char *identifier; + }; + struct tipc_bearer_identifier *entry; + struct tipc_bearer_identifier bname_list[] = { + { "udp", "name" }, + { "eth", "device" }, + { "ib", "device" }, + { NULL, }, + }; + + if (!(opt = get_opt(opts, "media"))) { + if (help_flag) + (cmd->help)(cmdl); + else + fprintf(stderr, "error, missing bearer media\n"); + return -EINVAL; + } + media = opt->val; + + for (entry = bname_list; entry->media; entry++) { + if (strcmp(entry->media, media)) + continue; + + if (!(opt = get_opt(opts, entry->identifier))) { + if (help_flag) + (cmd->help)(cmdl); + else + fprintf(stderr, "error, missing bearer %s\n", + entry->identifier); + return -EINVAL; + } + + identifier = opt->val; + snprintf(bname, TIPC_MAX_BEARER_NAME, "%s:%s", media, identifier); + + return 0; + } + + fprintf(stderr, "error, invalid media type %s\n", media); + + return -EINVAL; +} + void cmd_bearer_help(struct cmdl *cmdl) { fprintf(stderr, -- 2.1.4 ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e _______________________________________________ tipc-discussion mailing list tipc-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tipc-discussion