From 66d73b0713fae1287b7e2d74b1a4bd9d4d4c50a6 Mon Sep 17 00:00:00 2001 From: switch_st Date: Tue, 21 Jul 2020 20:47:14 +0800 Subject: [PATCH 1/8] fix supernode coredump when accessing management socket --- include/n2n.h | 2 ++ src/sn_utils.c | 30 +++++++++++++++--------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/include/n2n.h b/include/n2n.h index e4b3b4a..e0066a6 100644 --- a/include/n2n.h +++ b/include/n2n.h @@ -99,6 +99,8 @@ #include #endif +#define SAFE_SNPRINTF(BUF, SIZE, FORMAT, ...) (ssize_t)(SIZE) > 0 ? snprintf(BUF, SIZE, FORMAT, ##__VA_ARGS__) : 0 + #define ETH_ADDR_LEN 6 struct ether_hdr diff --git a/src/sn_utils.c b/src/sn_utils.c index 4ea34f6..c92950a 100644 --- a/src/sn_utils.c +++ b/src/sn_utils.c @@ -302,10 +302,10 @@ static int process_mgmt(n2n_sn_t *sss, traceEvent(TRACE_DEBUG, "process_mgmt"); - ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "----------------\n"); - ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "uptime %lu\n", (now - sss->start_time)); HASH_ITER(hh, sss->communities, community, tmp) @@ -313,54 +313,54 @@ static int process_mgmt(n2n_sn_t *sss, num_edges += HASH_COUNT(community->edges); } - ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "edges %u\n", num_edges); - ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "errors %u\n", (unsigned int)sss->stats.errors); - ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "reg_sup %u\n", (unsigned int)sss->stats.reg_super); - ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "reg_nak %u\n", (unsigned int)sss->stats.reg_super_nak); - ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "fwd %u\n", (unsigned int)sss->stats.fwd); - ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "broadcast %u\n", (unsigned int)sss->stats.broadcast); - ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "last fwd %lu sec ago\n", (long unsigned int)(now - sss->stats.last_fwd)); - ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "last reg %lu sec ago\n", (long unsigned int)(now - sss->stats.last_reg_super)); - ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, + ressize += SAFE_SNPRINTF(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, "cur_cmnts"); HASH_ITER(hh, sss->communities, community, tmp) { - ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, + ressize += SAFE_SNPRINTF(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, " [%s]", community->community); HASH_ITER(hh, community->edges, peer, tmpPeer) { - ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, + ressize += SAFE_SNPRINTF(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, " {%s}", macaddr_str(mac_buf, peer->mac_addr)); } } - ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, + ressize += SAFE_SNPRINTF(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, "\n"); - r = sendto(sss->mgmt_sock, resbuf, ressize, 0 /*flags*/, + r = sendto(sss->mgmt_sock, resbuf, MIN(ressize, N2N_SN_PKTBUF_SIZE), 0 /*flags*/, (struct sockaddr *)sender_sock, sizeof(struct sockaddr_in)); if (r <= 0) From 37bc520db2046eed812bd985c3a847f3aa262506 Mon Sep 17 00:00:00 2001 From: switch_st Date: Wed, 22 Jul 2020 11:58:07 +0800 Subject: [PATCH 2/8] fix supernode coredump when accessing management socket --- src/sn_utils.c | 54 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/src/sn_utils.c b/src/sn_utils.c index 4ea34f6..6beedcd 100644 --- a/src/sn_utils.c +++ b/src/sn_utils.c @@ -15,6 +15,11 @@ static ssize_t sendto_sock(n2n_sn_t *sss, const uint8_t *pktbuf, size_t pktsize); +static int sendto_mgmt(n2n_sn_t *sss, + const struct sockaddr_in *sender_sock, + const uint8_t *mgmt_buf, + size_t mgmt_size); + static int try_broadcast(n2n_sn_t * sss, const struct sn_community *comm, const n2n_common_t * cmn, @@ -295,10 +300,11 @@ static int process_mgmt(n2n_sn_t *sss, char resbuf[N2N_SN_PKTBUF_SIZE]; size_t ressize = 0; uint32_t num_edges = 0; - ssize_t r; + uint32_t num = 0; struct sn_community *community, *tmp; struct peer_info * peer, *tmpPeer; macstr_t mac_buf; + n2n_sock_str_t sockbuf; traceEvent(TRACE_DEBUG, "process_mgmt"); @@ -346,30 +352,46 @@ static int process_mgmt(n2n_sn_t *sss, (long unsigned int)(now - sss->stats.last_reg_super)); ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, - "cur_cmnts"); + "cur_cmnts %u\n", HASH_COUNT(sss->communities)); HASH_ITER(hh, sss->communities, community, tmp) { - ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, - " [%s]", - community->community); + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + "community: %s\n", community->community); + sendto_mgmt(sss, sender_sock, resbuf, ressize); + ressize = 0; + + num = 0; HASH_ITER(hh, community->edges, peer, tmpPeer) { - ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, - " {%s}", - macaddr_str(mac_buf, peer->mac_addr)); + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + "\t[id: %u][MAC: %s][edge: %s][last seen: %lu sec ago]\n", + ++num, macaddr_str(mac_buf, peer->mac_addr), + sock_to_cstr(sockbuf, &(peer->sock)), now-peer->last_seen); + + sendto_mgmt(sss, sender_sock, resbuf, ressize); + ressize = 0; } } + ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, "\n"); + sendto_mgmt(sss, sender_sock, resbuf, ressize); - r = sendto(sss->mgmt_sock, resbuf, ressize, 0 /*flags*/, - (struct sockaddr *)sender_sock, sizeof(struct sockaddr_in)); + return 0; +} - if (r <= 0) - { - ++(sss->stats.errors); - traceEvent(TRACE_ERROR, "process_mgmt : sendto failed. %s", strerror(errno)); - } +static int sendto_mgmt(n2n_sn_t *sss, + const struct sockaddr_in *sender_sock, + const uint8_t *mgmt_buf, + size_t mgmt_size) +{ + ssize_t r = sendto(sss->mgmt_sock, mgmt_buf, mgmt_size, 0 /*flags*/, + (struct sockaddr *)sender_sock, sizeof (struct sockaddr_in)); - return 0; + if (r <= 0) { + ++(sss->stats.errors); + traceEvent (TRACE_ERROR, "process_mgmt : sendto failed. %s", strerror (errno)); + return -1; + } + return 0; } /** Examine a datagram and determine what to do with it. From 81516d8d8ca840b2d7ca6759e4776652891d0108 Mon Sep 17 00:00:00 2001 From: switch_st Date: Wed, 22 Jul 2020 15:49:45 +0800 Subject: [PATCH 3/8] Update purge logic of communities and edges for supernode --- include/n2n_define.h | 3 +++ src/n2n.c | 3 --- src/sn_utils.c | 49 ++++++++++++++++++++++++++++++-------------- 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/include/n2n_define.h b/include/n2n_define.h index 28a851e..a5f1469 100644 --- a/include/n2n_define.h +++ b/include/n2n_define.h @@ -35,6 +35,9 @@ #define IFACE_UPDATE_INTERVAL (30) /* sec. How long it usually takes to get an IP lease. */ #define TRANSOP_TICK_INTERVAL (10) /* sec */ +#define PURGE_REGISTRATION_FREQUENCY 30 +#define REGISTRATION_TIMEOUT 60 + #define ETH_FRAMESIZE 14 #define IP4_SRCOFFSET 12 #define IP4_DSTOFFSET 16 diff --git a/src/n2n.c b/src/n2n.c index 7d57cf6..10f44c4 100644 --- a/src/n2n.c +++ b/src/n2n.c @@ -22,9 +22,6 @@ #include -#define PURGE_REGISTRATION_FREQUENCY 30 -#define REGISTRATION_TIMEOUT 60 - static const uint8_t broadcast_addr[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; static const uint8_t multicast_addr[6] = { 0x01, 0x00, 0x5E, 0x00, 0x00, 0x00 }; /* First 3 bytes are meaningful */ static const uint8_t ipv6_multicast_addr[6] = { 0x33, 0x33, 0x00, 0x00, 0x00, 0x00 }; /* First 2 bytes are meaningful */ diff --git a/src/sn_utils.c b/src/sn_utils.c index 4ea34f6..b966050 100644 --- a/src/sn_utils.c +++ b/src/sn_utils.c @@ -30,6 +30,10 @@ static int update_edge(n2n_sn_t *sss, const n2n_sock_t *sender_sock, time_t now); +static int purge_expired_communities(n2n_sn_t *sss, + time_t* p_last_purge, + time_t now); + static int process_mgmt(n2n_sn_t *sss, const struct sockaddr_in *sender_sock, const uint8_t *mgmt_buf, @@ -286,6 +290,35 @@ static int update_edge(n2n_sn_t *sss, return 0; } +static int purge_expired_communities(n2n_sn_t *sss, + time_t* p_last_purge, + time_t now) +{ + struct sn_community *comm, *tmp; + size_t num_reg = 0; + + if ((now - (*p_last_purge)) < PURGE_REGISTRATION_FREQUENCY) return 0; + + traceEvent(TRACE_DEBUG, "Purging old communities and edges"); + + HASH_ITER(hh, sss->communities, comm, tmp) { + num_reg += purge_peer_list(&comm->edges, now - REGISTRATION_TIMEOUT); + if ((comm->edges == NULL) && (!sss->lock_communities)) { + traceEvent(TRACE_INFO, "Purging idle community %s", comm->community); + if (NULL != comm->header_encryption_ctx) + /* this should not happen as no 'locked' and thus only communities w/o encrypted header here */ + free(comm->header_encryption_ctx); + HASH_DEL(sss->communities, comm); + free(comm); + } + } + (*p_last_purge) = now; + + traceEvent(TRACE_DEBUG, "Remove %ld edges", num_reg); + + return 0; +} + static int process_mgmt(n2n_sn_t *sss, const struct sockaddr_in *sender_sock, const uint8_t *mgmt_buf, @@ -759,7 +792,6 @@ int run_sn_loop(n2n_sn_t *sss, int *keep_running) { uint8_t pktbuf[N2N_SN_PKTBUF_SIZE]; time_t last_purge_edges = 0; - struct sn_community *comm, *tmp; sss->start_time = time(NULL); @@ -844,20 +876,7 @@ int run_sn_loop(n2n_sn_t *sss, int *keep_running) traceEvent(TRACE_DEBUG, "timeout"); } - HASH_ITER(hh, sss->communities, comm, tmp) - { - purge_expired_registrations(&comm->edges, &last_purge_edges); - - if ((comm->edges == NULL) && (!sss->lock_communities)) - { - traceEvent(TRACE_INFO, "Purging idle community %s", comm->community); - if (NULL != comm->header_encryption_ctx) - /* this should not happen as no 'locked' and thus only communities w/o encrypted header here */ - free (comm->header_encryption_ctx); - HASH_DEL(sss->communities, comm); - free(comm); - } - } + purge_expired_communities(sss, &last_purge_edges, now); } /* while */ From ee46e3e86b7b6272078884c23af7843d676c6dd4 Mon Sep 17 00:00:00 2001 From: switch_st Date: Wed, 22 Jul 2020 16:40:15 +0800 Subject: [PATCH 4/8] Revert "fix supernode coredump when accessing management socket" This reverts commit 66d73b0713fae1287b7e2d74b1a4bd9d4d4c50a6. --- include/n2n.h | 2 -- src/sn_utils.c | 30 +++++++++++++++--------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/include/n2n.h b/include/n2n.h index e0066a6..e4b3b4a 100644 --- a/include/n2n.h +++ b/include/n2n.h @@ -99,8 +99,6 @@ #include #endif -#define SAFE_SNPRINTF(BUF, SIZE, FORMAT, ...) (ssize_t)(SIZE) > 0 ? snprintf(BUF, SIZE, FORMAT, ##__VA_ARGS__) : 0 - #define ETH_ADDR_LEN 6 struct ether_hdr diff --git a/src/sn_utils.c b/src/sn_utils.c index c92950a..4ea34f6 100644 --- a/src/sn_utils.c +++ b/src/sn_utils.c @@ -302,10 +302,10 @@ static int process_mgmt(n2n_sn_t *sss, traceEvent(TRACE_DEBUG, "process_mgmt"); - ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "----------------\n"); - ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "uptime %lu\n", (now - sss->start_time)); HASH_ITER(hh, sss->communities, community, tmp) @@ -313,54 +313,54 @@ static int process_mgmt(n2n_sn_t *sss, num_edges += HASH_COUNT(community->edges); } - ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "edges %u\n", num_edges); - ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "errors %u\n", (unsigned int)sss->stats.errors); - ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "reg_sup %u\n", (unsigned int)sss->stats.reg_super); - ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "reg_nak %u\n", (unsigned int)sss->stats.reg_super_nak); - ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "fwd %u\n", (unsigned int)sss->stats.fwd); - ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "broadcast %u\n", (unsigned int)sss->stats.broadcast); - ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "last fwd %lu sec ago\n", (long unsigned int)(now - sss->stats.last_fwd)); - ressize += SAFE_SNPRINTF(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, + ressize += snprintf(resbuf + ressize, N2N_SN_PKTBUF_SIZE - ressize, "last reg %lu sec ago\n", (long unsigned int)(now - sss->stats.last_reg_super)); - ressize += SAFE_SNPRINTF(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, + ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, "cur_cmnts"); HASH_ITER(hh, sss->communities, community, tmp) { - ressize += SAFE_SNPRINTF(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, + ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, " [%s]", community->community); HASH_ITER(hh, community->edges, peer, tmpPeer) { - ressize += SAFE_SNPRINTF(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, + ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, " {%s}", macaddr_str(mac_buf, peer->mac_addr)); } } - ressize += SAFE_SNPRINTF(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, + ressize += snprintf(resbuf+ressize, N2N_SN_PKTBUF_SIZE-ressize, "\n"); - r = sendto(sss->mgmt_sock, resbuf, MIN(ressize, N2N_SN_PKTBUF_SIZE), 0 /*flags*/, + r = sendto(sss->mgmt_sock, resbuf, ressize, 0 /*flags*/, (struct sockaddr *)sender_sock, sizeof(struct sockaddr_in)); if (r <= 0) From 4d88fef4e270f6b1016c65cca75783db1cb4480d Mon Sep 17 00:00:00 2001 From: switch_st Date: Wed, 22 Jul 2020 17:18:00 +0800 Subject: [PATCH 5/8] update log word in sendto_mgmt --- src/sn_utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sn_utils.c b/src/sn_utils.c index 6beedcd..e2789d1 100644 --- a/src/sn_utils.c +++ b/src/sn_utils.c @@ -388,7 +388,7 @@ static int sendto_mgmt(n2n_sn_t *sss, if (r <= 0) { ++(sss->stats.errors); - traceEvent (TRACE_ERROR, "process_mgmt : sendto failed. %s", strerror (errno)); + traceEvent (TRACE_ERROR, "sendto_mgmt : sendto failed. %s", strerror (errno)); return -1; } return 0; From ca804b3a555a7110a0e8dd2d6f76d6f043019da0 Mon Sep 17 00:00:00 2001 From: switch_st Date: Thu, 23 Jul 2020 10:05:29 +0800 Subject: [PATCH 6/8] fix build warning of edge_init_routes --- src/edge_utils.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/edge_utils.c b/src/edge_utils.c index 94fca59..dc51a4f 100644 --- a/src/edge_utils.c +++ b/src/edge_utils.c @@ -2419,6 +2419,7 @@ static int edge_init_routes(n2n_edge_t *eee, n2n_route_t *routes, uint16_t num_r #ifdef WIN32 return edge_init_routes_win(eee, routes, num_routes); #endif + return 0; } /* ************************************** */ From d59b97784002dc209c7429baf0114a0f00810c58 Mon Sep 17 00:00:00 2001 From: switch_st Date: Fri, 24 Jul 2020 11:23:12 +0800 Subject: [PATCH 7/8] add management port command option to supernode --- include/n2n.h | 1 + src/sn.c | 17 ++++++++++++----- src/sn_utils.c | 1 + 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/include/n2n.h b/include/n2n.h index 9d9b1e7..29404d6 100644 --- a/include/n2n.h +++ b/include/n2n.h @@ -361,6 +361,7 @@ typedef struct n2n_sn sn_stats_t stats; int daemon; /* If non-zero then daemonise. */ uint16_t lport; /* Local UDP port to bind to. */ + uint16_t mport; /* Management UDP port to bind to. */ int sock; /* Main socket for UDP traffic with edges. */ int mgmt_sock; /* management socket. */ int lock_communities; /* If true, only loaded communities can be used. */ diff --git a/src/sn.c b/src/sn.c index 1354e57..2c84d8c 100644 --- a/src/sn.c +++ b/src/sn.c @@ -104,7 +104,8 @@ static void help() { "or\n" ); printf("supernode "); - printf("-l "); + printf("-l "); + printf("-t "); printf("-c "); #if defined(N2N_HAVE_DAEMON) printf("[-f] "); @@ -112,7 +113,8 @@ static void help() { printf("[-v] "); printf("\n\n"); - printf("-l \tSet UDP main listen port to \n"); + printf("-l \tSet UDP main listen port to \n"); + printf("-t \tManagement UDP Port (for multiple supernodes on a machine).\n"); printf("-c \tFile containing the allowed communities.\n"); #if defined(N2N_HAVE_DAEMON) printf("-f \tRun in foreground.\n"); @@ -135,6 +137,10 @@ static int setOption(int optkey, char *_optarg, n2n_sn_t *sss) { sss->lport = atoi(_optarg); break; + case 't': /* mgmt-port */ + sss->mport = atoi(_optarg); + break; + case 'c': /* community file */ load_allowed_sn_community(sss, _optarg); break; @@ -165,6 +171,7 @@ static const struct option long_options[] = { { "communities", required_argument, NULL, 'c' }, { "foreground", no_argument, NULL, 'f' }, { "local-port", required_argument, NULL, 'l' }, + { "mgmt-port", required_argument, NULL, 't' }, { "help" , no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { NULL, 0, NULL, 0 } @@ -176,7 +183,7 @@ static const struct option long_options[] = { static int loadFromCLI(int argc, char * const argv[], n2n_sn_t *sss) { u_char c; - while((c = getopt_long(argc, argv, "fl:c:vh", + while((c = getopt_long(argc, argv, "fl:t:c:vh", long_options, NULL)) != '?') { if(c == 255) break; setOption(c, optarg, sss); @@ -380,12 +387,12 @@ int main(int argc, char * const argv[]) { traceEvent(TRACE_NORMAL, "supernode is listening on UDP %u (main)", sss_node.lport); } - sss_node.mgmt_sock = open_socket(N2N_SN_MGMT_PORT, 0 /* bind LOOPBACK */); + sss_node.mgmt_sock = open_socket(sss_node.mport, 0 /* bind LOOPBACK */); if(-1 == sss_node.mgmt_sock) { traceEvent(TRACE_ERROR, "Failed to open management socket. %s", strerror(errno)); exit(-2); } else - traceEvent(TRACE_NORMAL, "supernode is listening on UDP %u (management)", N2N_SN_MGMT_PORT); + traceEvent(TRACE_NORMAL, "supernode is listening on UDP %u (management)", sss_node.mport); traceEvent(TRACE_NORMAL, "supernode started"); diff --git a/src/sn_utils.c b/src/sn_utils.c index 4ea34f6..b8cf663 100644 --- a/src/sn_utils.c +++ b/src/sn_utils.c @@ -184,6 +184,7 @@ int sn_init(n2n_sn_t *sss) sss->daemon = 1; /* By defult run as a daemon. */ sss->lport = N2N_SN_LPORT_DEFAULT; + sss->mport = N2N_SN_MGMT_PORT; sss->sock = -1; sss->mgmt_sock = -1; From 40f39caaac8145644a292420001a316296c9f2ed Mon Sep 17 00:00:00 2001 From: switch_st Date: Fri, 24 Jul 2020 11:52:44 +0800 Subject: [PATCH 8/8] change the management port command order --- src/sn.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/sn.c b/src/sn.c index 2c84d8c..203b122 100644 --- a/src/sn.c +++ b/src/sn.c @@ -105,20 +105,20 @@ static void help() { ); printf("supernode "); printf("-l "); - printf("-t "); printf("-c "); #if defined(N2N_HAVE_DAEMON) printf("[-f] "); #endif + printf("[-t ] "); printf("[-v] "); printf("\n\n"); printf("-l \tSet UDP main listen port to \n"); - printf("-t \tManagement UDP Port (for multiple supernodes on a machine).\n"); printf("-c \tFile containing the allowed communities.\n"); #if defined(N2N_HAVE_DAEMON) printf("-f \tRun in foreground.\n"); #endif /* #if defined(N2N_HAVE_DAEMON) */ + printf("-t \tManagement UDP Port (for multiple supernodes on a machine).\n"); printf("-v \tIncrease verbosity. Can be used multiple times.\n"); printf("-h \tThis help message.\n"); printf("\n"); @@ -174,7 +174,7 @@ static const struct option long_options[] = { { "mgmt-port", required_argument, NULL, 't' }, { "help" , no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, - { NULL, 0, NULL, 0 } + { NULL, 0, NULL, 0 } }; /* *************************************************** */