diff --git a/mud b/mud index fd48ff0..c6fbe52 160000 --- a/mud +++ b/mud @@ -1 +1 @@ -Subproject commit fd48ff08b98746233f333968a4f07589535cb2a5 +Subproject commit c6fbe52fbd4cdeb30c866ad17664ef6379c010fd diff --git a/src/common.c b/src/common.c index 96f569e..89aed3f 100644 --- a/src/common.c +++ b/src/common.c @@ -99,6 +99,9 @@ gt_get_port(struct sockaddr *sa) int gt_toaddr(char *str, size_t size, struct sockaddr *sa) { + if (str) + str[0] = 0; + switch (sa->sa_family) { case AF_INET: return -!inet_ntop(AF_INET, diff --git a/src/path.c b/src/path.c index 902b8ab..c9fbfc0 100644 --- a/src/path.c +++ b/src/path.c @@ -27,17 +27,16 @@ gt_path_status(int fd) if (!res.ret) return 0; - char bindstr[INET6_ADDRSTRLEN] = {0}; - char publstr[INET6_ADDRSTRLEN] = {0}; - char peerstr[INET6_ADDRSTRLEN] = {0}; + char bindstr[INET6_ADDRSTRLEN]; + char publstr[INET6_ADDRSTRLEN]; + char peerstr[INET6_ADDRSTRLEN]; - if (gt_toaddr(bindstr, sizeof(bindstr), - (struct sockaddr *)&res.path_status.local_addr) || - gt_toaddr(publstr, sizeof(publstr), - (struct sockaddr *)&res.path_status.r_addr) || - gt_toaddr(peerstr, sizeof(peerstr), - (struct sockaddr *)&res.path_status.addr)) - return -2; + gt_toaddr(bindstr, sizeof(bindstr), + (struct sockaddr *)&res.path_status.local_addr); + gt_toaddr(publstr, sizeof(publstr), + (struct sockaddr *)&res.path_status.r_addr); + gt_toaddr(peerstr, sizeof(peerstr), + (struct sockaddr *)&res.path_status.addr); const char *statestr = NULL; @@ -49,17 +48,20 @@ gt_path_status(int fd) } printf("path %s\n" - " bind: %s\n" + " bind: %s port %"PRIu16"\n" " public: %s port %"PRIu16"\n" " peer: %s port %"PRIu16"\n" " mtu: %zu bytes\n" " rtt: %.3f ms\n", - statestr, bindstr, - publstr, gt_get_port((struct sockaddr *)&res.path_status.r_addr), - peerstr, gt_get_port((struct sockaddr *)&res.path_status.addr), + statestr, + bindstr[0] ? bindstr : "-", + gt_get_port((struct sockaddr *)&res.path_status.local_addr), + publstr[0] ? publstr : "-", + gt_get_port((struct sockaddr *)&res.path_status.r_addr), + peerstr[0] ? peerstr : "-", + gt_get_port((struct sockaddr *)&res.path_status.addr), res.path_status.mtu.ok + 28U, /* ip+udp hdr */ res.path_status.rtt/(double)1e3); - } while (res.ret == EAGAIN); return 0; diff --git a/src/show.c b/src/show.c index 5cd3422..d95ef6a 100644 --- a/src/show.c +++ b/src/show.c @@ -18,12 +18,11 @@ gt_show_dev_status(int fd, const char *dev) if (ctl_reply(fd, &res, &req)) return -1; - char bindstr[INET6_ADDRSTRLEN] = {0}; - char peerstr[INET6_ADDRSTRLEN] = {0}; + char bindstr[INET6_ADDRSTRLEN]; + char peerstr[INET6_ADDRSTRLEN]; - if (gt_toaddr(bindstr, sizeof(bindstr), - (struct sockaddr *)&res.status.bind)) - return -2; + gt_toaddr(bindstr, sizeof(bindstr), + (struct sockaddr *)&res.status.bind); int server = gt_toaddr(peerstr, sizeof(peerstr), (struct sockaddr *)&res.status.peer); @@ -34,7 +33,8 @@ gt_show_dev_status(int fd, const char *dev) " mtu: %zu\n" " cipher: %s\n", dev, - bindstr, gt_get_port((struct sockaddr *)&res.status.bind), + bindstr[0] ? bindstr : "-", + gt_get_port((struct sockaddr *)&res.status.bind), res.status.mtu, res.status.chacha ? "chacha20poly1305" : "aes256gcm"); } else { @@ -44,8 +44,10 @@ gt_show_dev_status(int fd, const char *dev) " mtu: %zu\n" " cipher: %s\n", dev, - bindstr, gt_get_port((struct sockaddr *)&res.status.bind), - peerstr, gt_get_port((struct sockaddr *)&res.status.peer), + bindstr[0] ? bindstr : "-", + gt_get_port((struct sockaddr *)&res.status.bind), + peerstr[0] ? peerstr : "-", + gt_get_port((struct sockaddr *)&res.status.peer), res.status.mtu, res.status.chacha ? "chacha20poly1305" : "aes256gcm"); }