From 9216e2819b563d3e519b131a7ec34b3ddc196e25 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Tue, 14 Aug 2012 14:03:58 +0200 Subject: Send IPv6 address in NETINFO cells. Closes #6364. --- changes/bug6364 | 3 +++ src/or/connection_or.c | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 changes/bug6364 diff --git a/changes/bug6364 b/changes/bug6364 new file mode 100644 index 0000000000..c0eb453959 --- /dev/null +++ b/changes/bug6364 @@ -0,0 +1,3 @@ + o Minor features: + - A relay with an IPv6 OR port now sends that address in NETINFO + cells. Fix for bug 6364. diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 55ea32e57b..da27cba32d 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -1988,12 +1988,19 @@ connection_or_send_netinfo(or_connection_t *conn) if ((public_server_mode(get_options()) || !conn->is_outgoing) && (me = router_get_my_routerinfo())) { tor_addr_t my_addr; - *out++ = 1; /* only one address is supported. */ + *out++ = 1 + !tor_addr_is_null(&me->ipv6_addr); tor_addr_from_ipv4h(&my_addr, me->addr); len = append_address_to_payload(out, &my_addr); if (len < 0) return -1; + out += len; + + if (!tor_addr_is_null(&me->ipv6_addr)) { + len = append_address_to_payload(out, &me->ipv6_addr); + if (len < 0) + return -1; + } } else { *out = 0; } -- cgit v1.2.3-54-g00ecf From 734b09080f31545e8acd57a5c9626f6465ea4374 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Tue, 21 Aug 2012 18:43:36 +0200 Subject: Fetch IPv6 address from NETINFO "other OR's address" field. The my_apparent_addr is still unused, apart from now being logged in the "Got good NETINFO cell" info message. --- src/or/command.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/or/command.c b/src/or/command.c index abf664c1e2..88603c924a 100644 --- a/src/or/command.c +++ b/src/or/command.c @@ -808,7 +808,7 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn) time_t now = time(NULL); long apparent_skew = 0; - uint32_t my_apparent_addr = 0; + tor_addr_t my_apparent_addr = TOR_ADDR_NULL; if (conn->link_proto < 2) { log_fn(LOG_PROTOCOL_WARN, LD_OR, @@ -868,7 +868,9 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn) connection_mark_for_close(TO_CONN(conn)); return; } else if (my_addr_type == RESOLVED_TYPE_IPV4 && my_addr_len == 4) { - my_apparent_addr = ntohl(get_uint32(my_addr_ptr)); + tor_addr_from_ipv4n(&my_apparent_addr, get_uint32(my_addr_ptr)); + } else if (my_addr_type == RESOLVED_TYPE_IPV6 && my_addr_len == 16) { + tor_addr_from_ipv6_bytes(&my_apparent_addr, (const char *) my_addr_ptr); } n_other_addrs = (uint8_t) *cp++; @@ -921,7 +923,6 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn) /* XXX maybe act on my_apparent_addr, if the source is sufficiently * trustworthy. */ - (void)my_apparent_addr; if (connection_or_set_state_open(conn)<0) { log_fn(LOG_PROTOCOL_WARN, LD_OR, "Got good NETINFO cell from %s:%d; but " @@ -931,10 +932,13 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn) connection_mark_for_close(TO_CONN(conn)); } else { log_info(LD_OR, "Got good NETINFO cell from %s:%d; OR connection is now " - "open, using protocol version %d. Its ID digest is %s", + "open, using protocol version %d. Its ID digest is %s. " + "Our address is apparently %s.", safe_str_client(conn->_base.address), conn->_base.port, (int)conn->link_proto, - hex_str(conn->identity_digest, DIGEST_LEN)); + hex_str(conn->identity_digest, DIGEST_LEN), + tor_addr_is_null(&my_apparent_addr) ? + "" : fmt_and_decorate_addr(&my_apparent_addr)); } assert_connection_ok(TO_CONN(conn),time(NULL)); } -- cgit v1.2.3-54-g00ecf