diff options
author | Stephen Hemminger <stephen@networkplumber.org> | 2018-06-08 10:27:04 -0700 |
---|---|---|
committer | Stephen Hemminger <stephen@networkplumber.org> | 2018-06-08 10:27:04 -0700 |
commit | 17678d3059ade722eeab4e4f51d50445b87c0a61 (patch) | |
tree | b5a6d5cfdbdf9757c5114f3a0397060d005be7a1 /tipc | |
parent | 2d3dd6f6c12ff4ad09eed9aea925aa5dee8bf865 (diff) | |
parent | 831b5d40d91631b944e348fa2c5f0f2c46ffaccf (diff) |
Merge ../iproute2-next
Diffstat (limited to 'tipc')
-rw-r--r-- | tipc/bearer.c | 55 | ||||
-rw-r--r-- | tipc/media.c | 24 | ||||
-rw-r--r-- | tipc/misc.c | 20 | ||||
-rw-r--r-- | tipc/misc.h | 1 | ||||
-rw-r--r-- | tipc/nametable.c | 18 | ||||
-rw-r--r-- | tipc/node.c | 19 | ||||
-rw-r--r-- | tipc/peer.c | 4 |
7 files changed, 111 insertions, 30 deletions
diff --git a/tipc/bearer.c b/tipc/bearer.c index 0d845701..05dc84aa 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 6e10c7e5..969ef657 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 } }; diff --git a/tipc/misc.c b/tipc/misc.c index 16849f18..e4b1cd0c 100644 --- a/tipc/misc.c +++ b/tipc/misc.c @@ -13,6 +13,10 @@ #include <stdint.h> #include <linux/tipc.h> #include <string.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <unistd.h> +#include <errno.h> #include "misc.h" #define IN_RANGE(val, low, high) ((val) <= (high) && (val) >= (low)) @@ -109,3 +113,19 @@ void nodeid2str(uint8_t *id, char *str) for (i = 31; str[i] == '0'; i--) str[i] = 0; } + +void hash2nodestr(uint32_t hash, char *str) +{ + struct tipc_sioc_nodeid_req nr = {}; + int sd; + + sd = socket(AF_TIPC, SOCK_RDM, 0); + if (sd < 0) { + fprintf(stderr, "opening TIPC socket: %s\n", strerror(errno)); + return; + } + nr.peer = hash; + if (!ioctl(sd, SIOCGETNODEID, &nr)) + nodeid2str((uint8_t *)nr.node_id, str); + close(sd); +} diff --git a/tipc/misc.h b/tipc/misc.h index 6e8afddf..ff2f31f1 100644 --- a/tipc/misc.h +++ b/tipc/misc.h @@ -17,5 +17,6 @@ uint32_t str2addr(char *str); int str2nodeid(char *str, uint8_t *id); void nodeid2str(uint8_t *id, char *str); +void hash2nodestr(uint32_t hash, char *str); #endif diff --git a/tipc/nametable.c b/tipc/nametable.c index 2578940f..ae73dfa5 100644 --- a/tipc/nametable.c +++ b/tipc/nametable.c @@ -20,6 +20,7 @@ #include "cmdl.h" #include "msg.h" #include "nametable.h" +#include "misc.h" #define PORTID_STR_LEN 45 /* Four u32 and five delimiter chars */ @@ -31,6 +32,7 @@ static int nametable_show_cb(const struct nlmsghdr *nlh, void *data) struct nlattr *attrs[TIPC_NLA_NAME_TABLE_MAX + 1] = {}; struct nlattr *publ[TIPC_NLA_PUBL_MAX + 1] = {}; const char *scope[] = { "", "zone", "cluster", "node" }; + char str[33] = {0,}; mnl_attr_parse(nlh, sizeof(*genl), parse_attrs, info); if (!info[TIPC_NLA_NAME_TABLE]) @@ -45,20 +47,20 @@ static int nametable_show_cb(const struct nlmsghdr *nlh, void *data) return MNL_CB_ERROR; if (!*iteration) - printf("%-10s %-10s %-10s %-10s %-10s %-10s\n", - "Type", "Lower", "Upper", "Node", "Port", - "Publication Scope"); + printf("%-10s %-10s %-10s %-8s %-10s %-33s\n", + "Type", "Lower", "Upper", "Scope", "Port", + "Node"); (*iteration)++; - printf("%-10u %-10u %-10u %-10x %-10u %-12u", + hash2nodestr(mnl_attr_get_u32(publ[TIPC_NLA_PUBL_NODE]), str); + + printf("%-10u %-10u %-10u %-8s %-10u %s\n", mnl_attr_get_u32(publ[TIPC_NLA_PUBL_TYPE]), mnl_attr_get_u32(publ[TIPC_NLA_PUBL_LOWER]), mnl_attr_get_u32(publ[TIPC_NLA_PUBL_UPPER]), - mnl_attr_get_u32(publ[TIPC_NLA_PUBL_NODE]), + scope[mnl_attr_get_u32(publ[TIPC_NLA_PUBL_SCOPE])], mnl_attr_get_u32(publ[TIPC_NLA_PUBL_REF]), - mnl_attr_get_u32(publ[TIPC_NLA_PUBL_KEY])); - - printf("%s\n", scope[mnl_attr_get_u32(publ[TIPC_NLA_PUBL_SCOPE])]); + str); return MNL_CB_OK; } diff --git a/tipc/node.c b/tipc/node.c index b73b644c..0fa1064c 100644 --- a/tipc/node.c +++ b/tipc/node.c @@ -26,10 +26,11 @@ static int node_list_cb(const struct nlmsghdr *nlh, void *data) { - uint32_t addr; struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh); struct nlattr *info[TIPC_NLA_MAX + 1] = {}; struct nlattr *attrs[TIPC_NLA_NODE_MAX + 1] = {}; + char str[33] = {}; + uint32_t addr; mnl_attr_parse(nlh, sizeof(*genl), parse_attrs, info); if (!info[TIPC_NLA_NODE]) @@ -40,13 +41,12 @@ static int node_list_cb(const struct nlmsghdr *nlh, void *data) return MNL_CB_ERROR; addr = mnl_attr_get_u32(attrs[TIPC_NLA_NODE_ADDR]); - printf("%x: ", addr); - + hash2nodestr(addr, str); + printf("%-32s %08x ", str, addr); if (attrs[TIPC_NLA_NODE_UP]) printf("up\n"); else printf("down\n"); - return MNL_CB_OK; } @@ -64,7 +64,7 @@ static int cmd_node_list(struct nlmsghdr *nlh, const struct cmd *cmd, fprintf(stderr, "error, message initialisation failed\n"); return -1; } - + printf("Node Identity Hash State\n"); return msg_dumpit(nlh, node_list_cb, NULL); } @@ -120,7 +120,7 @@ static int cmd_node_get_addr(struct nlmsghdr *nlh, const struct cmd *cmd, } close(sk); - printf("%x\n", addr.addr.id.node); + printf("%08x\n", addr.addr.id.node); return 0; } @@ -167,7 +167,6 @@ static int nodeid_get_cb(const struct nlmsghdr *nlh, void *data) uint8_t id[16] = {0,}; uint64_t *w0 = (uint64_t *) &id[0]; uint64_t *w1 = (uint64_t *) &id[8]; - int i; mnl_attr_parse(nlh, sizeof(*genl), parse_attrs, info); if (!info[TIPC_NLA_NET]) @@ -180,10 +179,8 @@ static int nodeid_get_cb(const struct nlmsghdr *nlh, void *data) *w0 = mnl_attr_get_u64(attrs[TIPC_NLA_NET_NODEID]); *w1 = mnl_attr_get_u64(attrs[TIPC_NLA_NET_NODEID_W1]); nodeid2str(id, str); - printf("Node Identity Hash\n"); - printf("%s", str); - for (i = strlen(str); i <= 33; i++) - printf(" "); + printf("Node Identity Hash\n"); + printf("%-33s", str); cmd_node_get_addr(NULL, NULL, NULL, NULL); return MNL_CB_OK; } diff --git a/tipc/peer.c b/tipc/peer.c index de0c73c3..f6380777 100644 --- a/tipc/peer.c +++ b/tipc/peer.c @@ -39,8 +39,12 @@ static int cmd_peer_rm_addr(struct nlmsghdr *nlh, const struct cmd *cmd, } str = shift_cmdl(cmdl); + + /* First try legacy Z.C.N format, then integer format */ addr = str2addr(str); if (!addr) + addr = atoi(str); + if (!addr) return -1; if (!(nlh = msg_init(buf, TIPC_NL_PEER_REMOVE))) { |