Bug 28780: Add purpose for keeping padding circuits open

This commit is contained in:
Mike Perry 2019-05-15 04:42:28 +00:00 committed by George Kadianakis
parent 43d4119454
commit d44e3e57b0
3 changed files with 22 additions and 13 deletions

View File

@ -823,6 +823,8 @@ circuit_purpose_to_controller_string(uint8_t purpose)
return "PATH_BIAS_TESTING"; return "PATH_BIAS_TESTING";
case CIRCUIT_PURPOSE_HS_VANGUARDS: case CIRCUIT_PURPOSE_HS_VANGUARDS:
return "HS_VANGUARDS"; return "HS_VANGUARDS";
case CIRCUIT_PURPOSE_C_CIRCUIT_PADDING:
return "CIRCUIT_PADDING";
default: default:
tor_snprintf(buf, sizeof(buf), "UNKNOWN_%d", (int)purpose); tor_snprintf(buf, sizeof(buf), "UNKNOWN_%d", (int)purpose);
@ -852,6 +854,7 @@ circuit_purpose_to_controller_hs_state_string(uint8_t purpose)
case CIRCUIT_PURPOSE_CONTROLLER: case CIRCUIT_PURPOSE_CONTROLLER:
case CIRCUIT_PURPOSE_PATH_BIAS_TESTING: case CIRCUIT_PURPOSE_PATH_BIAS_TESTING:
case CIRCUIT_PURPOSE_HS_VANGUARDS: case CIRCUIT_PURPOSE_HS_VANGUARDS:
case CIRCUIT_PURPOSE_C_CIRCUIT_PADDING:
return NULL; return NULL;
case CIRCUIT_PURPOSE_INTRO_POINT: case CIRCUIT_PURPOSE_INTRO_POINT:
@ -952,6 +955,9 @@ circuit_purpose_to_string(uint8_t purpose)
case CIRCUIT_PURPOSE_HS_VANGUARDS: case CIRCUIT_PURPOSE_HS_VANGUARDS:
return "Hidden service: Pre-built vanguard circuit"; return "Hidden service: Pre-built vanguard circuit";
case CIRCUIT_PURPOSE_C_CIRCUIT_PADDING:
return "Circuit kept open for padding";
default: default:
tor_snprintf(buf, sizeof(buf), "UNKNOWN_%d", (int)purpose); tor_snprintf(buf, sizeof(buf), "UNKNOWN_%d", (int)purpose);
return buf; return buf;

View File

@ -92,31 +92,33 @@
#define CIRCUIT_PURPOSE_C_HS_MAX_ 13 #define CIRCUIT_PURPOSE_C_HS_MAX_ 13
/** This circuit is used for build time measurement only */ /** This circuit is used for build time measurement only */
#define CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT 14 #define CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT 14
#define CIRCUIT_PURPOSE_C_MAX_ 14 /** This circuit is being held open by circuit padding */
#define CIRCUIT_PURPOSE_C_CIRCUIT_PADDING 15
#define CIRCUIT_PURPOSE_C_MAX_ 15
#define CIRCUIT_PURPOSE_S_HS_MIN_ 15 #define CIRCUIT_PURPOSE_S_HS_MIN_ 16
/** Hidden-service-side circuit purpose: at the service, waiting for /** Hidden-service-side circuit purpose: at the service, waiting for
* introductions. */ * introductions. */
#define CIRCUIT_PURPOSE_S_ESTABLISH_INTRO 15 #define CIRCUIT_PURPOSE_S_ESTABLISH_INTRO 16
/** Hidden-service-side circuit purpose: at the service, successfully /** Hidden-service-side circuit purpose: at the service, successfully
* established intro. */ * established intro. */
#define CIRCUIT_PURPOSE_S_INTRO 16 #define CIRCUIT_PURPOSE_S_INTRO 17
/** Hidden-service-side circuit purpose: at the service, connecting to rend /** Hidden-service-side circuit purpose: at the service, connecting to rend
* point. */ * point. */
#define CIRCUIT_PURPOSE_S_CONNECT_REND 17 #define CIRCUIT_PURPOSE_S_CONNECT_REND 18
/** Hidden-service-side circuit purpose: at the service, rendezvous /** Hidden-service-side circuit purpose: at the service, rendezvous
* established. */ * established. */
#define CIRCUIT_PURPOSE_S_REND_JOINED 18 #define CIRCUIT_PURPOSE_S_REND_JOINED 19
/** This circuit is used for uploading hsdirs */ /** This circuit is used for uploading hsdirs */
#define CIRCUIT_PURPOSE_S_HSDIR_POST 19 #define CIRCUIT_PURPOSE_S_HSDIR_POST 20
#define CIRCUIT_PURPOSE_S_HS_MAX_ 19 #define CIRCUIT_PURPOSE_S_HS_MAX_ 20
/** A testing circuit; not meant to be used for actual traffic. */ /** A testing circuit; not meant to be used for actual traffic. */
#define CIRCUIT_PURPOSE_TESTING 20 #define CIRCUIT_PURPOSE_TESTING 21
/** A controller made this circuit and Tor should not use it. */ /** A controller made this circuit and Tor should not use it. */
#define CIRCUIT_PURPOSE_CONTROLLER 21 #define CIRCUIT_PURPOSE_CONTROLLER 22
/** This circuit is used for path bias probing only */ /** This circuit is used for path bias probing only */
#define CIRCUIT_PURPOSE_PATH_BIAS_TESTING 22 #define CIRCUIT_PURPOSE_PATH_BIAS_TESTING 23
/** This circuit is used for vanguards/restricted paths. /** This circuit is used for vanguards/restricted paths.
* *
@ -124,9 +126,9 @@
* on-demand. When an HS operation needs to take place (e.g. connect to an * on-demand. When an HS operation needs to take place (e.g. connect to an
* intro point), these circuits are then cannibalized and repurposed to the * intro point), these circuits are then cannibalized and repurposed to the
* actual needed HS purpose. */ * actual needed HS purpose. */
#define CIRCUIT_PURPOSE_HS_VANGUARDS 23 #define CIRCUIT_PURPOSE_HS_VANGUARDS 24
#define CIRCUIT_PURPOSE_MAX_ 23 #define CIRCUIT_PURPOSE_MAX_ 24
/** A catch-all for unrecognized purposes. Currently we don't expect /** A catch-all for unrecognized purposes. Currently we don't expect
* to make or see any circuits with this purpose. */ * to make or see any circuits with this purpose. */
#define CIRCUIT_PURPOSE_UNKNOWN 255 #define CIRCUIT_PURPOSE_UNKNOWN 255

View File

@ -1514,6 +1514,7 @@ circuit_expire_old_circuits_clientside(void)
circ->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT || circ->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT ||
circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO || circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
circ->purpose == CIRCUIT_PURPOSE_TESTING || circ->purpose == CIRCUIT_PURPOSE_TESTING ||
circ->purpose == CIRCUIT_PURPOSE_C_CIRCUIT_PADDING ||
(circ->purpose >= CIRCUIT_PURPOSE_C_INTRODUCING && (circ->purpose >= CIRCUIT_PURPOSE_C_INTRODUCING &&
circ->purpose <= CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED) || circ->purpose <= CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED) ||
circ->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND) { circ->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND) {