trunnel: Add Conflux related cell definition

Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
David Goulet 2022-12-12 13:09:27 -05:00 committed by Mike Perry
parent a9fc6c937c
commit 45432175fe
4 changed files with 1652 additions and 3 deletions

1158
src/trunnel/conflux.c Normal file

File diff suppressed because it is too large Load Diff

422
src/trunnel/conflux.h Normal file
View File

@ -0,0 +1,422 @@
/* conflux.h -- generated by Trunnel v1.5.3.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
#ifndef TRUNNEL_CONFLUX_H
#define TRUNNEL_CONFLUX_H
#include <stdint.h>
#include "trunnel.h"
#define CONFLUX_UX_NO_OPINION 0
#define CONFLUX_UX_MIN_LATENCY 1
#define CONFLUX_UX_LOW_MEM_LATENCY 2
#define CONFLUX_UX_HIGH_THROUGHPUT 3
#define CONFLUX_UX_LOW_MEM_THROUGHPUT 4
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_CONFLUX_LINK)
struct trn_cell_conflux_link_st {
uint8_t version;
TRUNNEL_DYNARRAY_HEAD(, uint8_t) payload;
uint8_t trunnel_error_code_;
};
#endif
typedef struct trn_cell_conflux_link_st trn_cell_conflux_link_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_CONFLUX_LINK_PAYLOAD_V1)
struct trn_cell_conflux_link_payload_v1_st {
uint8_t nonce[32];
uint64_t last_seqno_sent;
uint64_t last_seqno_recv;
uint8_t desired_ux;
uint8_t trunnel_error_code_;
};
#endif
typedef struct trn_cell_conflux_link_payload_v1_st trn_cell_conflux_link_payload_v1_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_CONFLUX_LINKED)
struct trn_cell_conflux_linked_st {
uint8_t version;
TRUNNEL_DYNARRAY_HEAD(, uint8_t) payload;
uint8_t trunnel_error_code_;
};
#endif
typedef struct trn_cell_conflux_linked_st trn_cell_conflux_linked_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_CONFLUX_LINKED_ACK)
struct trn_cell_conflux_linked_ack_st {
TRUNNEL_DYNARRAY_HEAD(, uint8_t) payload;
uint8_t trunnel_error_code_;
};
#endif
typedef struct trn_cell_conflux_linked_ack_st trn_cell_conflux_linked_ack_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_CONFLUX_SWITCH)
struct trn_cell_conflux_switch_st {
uint32_t seqnum;
uint8_t trunnel_error_code_;
};
#endif
typedef struct trn_cell_conflux_switch_st trn_cell_conflux_switch_t;
/** Return a newly allocated trn_cell_conflux_link with all elements
* set to zero.
*/
trn_cell_conflux_link_t *trn_cell_conflux_link_new(void);
/** Release all storage held by the trn_cell_conflux_link in 'victim'.
* (Do nothing if 'victim' is NULL.)
*/
void trn_cell_conflux_link_free(trn_cell_conflux_link_t *victim);
/** Try to parse a trn_cell_conflux_link from the buffer in 'input',
* using up to 'len_in' bytes from the input buffer. On success,
* return the number of bytes consumed and set *output to the newly
* allocated trn_cell_conflux_link_t. On failure, return -2 if the
* input appears truncated, and -1 if the input is otherwise invalid.
*/
ssize_t trn_cell_conflux_link_parse(trn_cell_conflux_link_t **output, const uint8_t *input, const size_t len_in);
/** Return the number of bytes we expect to need to encode the
* trn_cell_conflux_link in 'obj'. On failure, return a negative
* value. Note that this value may be an overestimate, and can even be
* an underestimate for certain unencodeable objects.
*/
ssize_t trn_cell_conflux_link_encoded_len(const trn_cell_conflux_link_t *obj);
/** Try to encode the trn_cell_conflux_link from 'input' into the
* buffer at 'output', using up to 'avail' bytes of the output buffer.
* On success, return the number of bytes used. On failure, return -2
* if the buffer was not long enough, and -1 if the input was invalid.
*/
ssize_t trn_cell_conflux_link_encode(uint8_t *output, size_t avail, const trn_cell_conflux_link_t *input);
/** Check whether the internal state of the trn_cell_conflux_link in
* 'obj' is consistent. Return NULL if it is, and a short message if
* it is not.
*/
const char *trn_cell_conflux_link_check(const trn_cell_conflux_link_t *obj);
/** Clear any errors that were set on the object 'obj' by its setter
* functions. Return true iff errors were cleared.
*/
int trn_cell_conflux_link_clear_errors(trn_cell_conflux_link_t *obj);
/** Return the value of the version field of the
* trn_cell_conflux_link_t in 'inp'
*/
uint8_t trn_cell_conflux_link_get_version(const trn_cell_conflux_link_t *inp);
/** Set the value of the version field of the trn_cell_conflux_link_t
* in 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
*/
int trn_cell_conflux_link_set_version(trn_cell_conflux_link_t *inp, uint8_t val);
/** Return the length of the dynamic array holding the payload field
* of the trn_cell_conflux_link_t in 'inp'.
*/
size_t trn_cell_conflux_link_getlen_payload(const trn_cell_conflux_link_t *inp);
/** Return the element at position 'idx' of the dynamic array field
* payload of the trn_cell_conflux_link_t in 'inp'.
*/
uint8_t trn_cell_conflux_link_get_payload(trn_cell_conflux_link_t *inp, size_t idx);
/** As trn_cell_conflux_link_get_payload, but take and return a const
* pointer
*/
uint8_t trn_cell_conflux_link_getconst_payload(const trn_cell_conflux_link_t *inp, size_t idx);
/** Change the element at position 'idx' of the dynamic array field
* payload of the trn_cell_conflux_link_t in 'inp', so that it will
* hold the value 'elt'.
*/
int trn_cell_conflux_link_set_payload(trn_cell_conflux_link_t *inp, size_t idx, uint8_t elt);
/** Append a new element 'elt' to the dynamic array field payload of
* the trn_cell_conflux_link_t in 'inp'.
*/
int trn_cell_conflux_link_add_payload(trn_cell_conflux_link_t *inp, uint8_t elt);
/** Return a pointer to the variable-length array field payload of
* 'inp'.
*/
uint8_t * trn_cell_conflux_link_getarray_payload(trn_cell_conflux_link_t *inp);
/** As trn_cell_conflux_link_get_payload, but take and return a const
* pointer
*/
const uint8_t * trn_cell_conflux_link_getconstarray_payload(const trn_cell_conflux_link_t *inp);
/** Change the length of the variable-length array field payload of
* 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
*/
int trn_cell_conflux_link_setlen_payload(trn_cell_conflux_link_t *inp, size_t newlen);
/** Return a newly allocated trn_cell_conflux_link_payload_v1 with all
* elements set to zero.
*/
trn_cell_conflux_link_payload_v1_t *trn_cell_conflux_link_payload_v1_new(void);
/** Release all storage held by the trn_cell_conflux_link_payload_v1
* in 'victim'. (Do nothing if 'victim' is NULL.)
*/
void trn_cell_conflux_link_payload_v1_free(trn_cell_conflux_link_payload_v1_t *victim);
/** Try to parse a trn_cell_conflux_link_payload_v1 from the buffer in
* 'input', using up to 'len_in' bytes from the input buffer. On
* success, return the number of bytes consumed and set *output to the
* newly allocated trn_cell_conflux_link_payload_v1_t. On failure,
* return -2 if the input appears truncated, and -1 if the input is
* otherwise invalid.
*/
ssize_t trn_cell_conflux_link_payload_v1_parse(trn_cell_conflux_link_payload_v1_t **output, const uint8_t *input, const size_t len_in);
/** Return the number of bytes we expect to need to encode the
* trn_cell_conflux_link_payload_v1 in 'obj'. On failure, return a
* negative value. Note that this value may be an overestimate, and
* can even be an underestimate for certain unencodeable objects.
*/
ssize_t trn_cell_conflux_link_payload_v1_encoded_len(const trn_cell_conflux_link_payload_v1_t *obj);
/** Try to encode the trn_cell_conflux_link_payload_v1 from 'input'
* into the buffer at 'output', using up to 'avail' bytes of the
* output buffer. On success, return the number of bytes used. On
* failure, return -2 if the buffer was not long enough, and -1 if the
* input was invalid.
*/
ssize_t trn_cell_conflux_link_payload_v1_encode(uint8_t *output, size_t avail, const trn_cell_conflux_link_payload_v1_t *input);
/** Check whether the internal state of the
* trn_cell_conflux_link_payload_v1 in 'obj' is consistent. Return
* NULL if it is, and a short message if it is not.
*/
const char *trn_cell_conflux_link_payload_v1_check(const trn_cell_conflux_link_payload_v1_t *obj);
/** Clear any errors that were set on the object 'obj' by its setter
* functions. Return true iff errors were cleared.
*/
int trn_cell_conflux_link_payload_v1_clear_errors(trn_cell_conflux_link_payload_v1_t *obj);
/** Return the (constant) length of the array holding the nonce field
* of the trn_cell_conflux_link_payload_v1_t in 'inp'.
*/
size_t trn_cell_conflux_link_payload_v1_getlen_nonce(const trn_cell_conflux_link_payload_v1_t *inp);
/** Return the element at position 'idx' of the fixed array field
* nonce of the trn_cell_conflux_link_payload_v1_t in 'inp'.
*/
uint8_t trn_cell_conflux_link_payload_v1_get_nonce(trn_cell_conflux_link_payload_v1_t *inp, size_t idx);
/** As trn_cell_conflux_link_payload_v1_get_nonce, but take and return
* a const pointer
*/
uint8_t trn_cell_conflux_link_payload_v1_getconst_nonce(const trn_cell_conflux_link_payload_v1_t *inp, size_t idx);
/** Change the element at position 'idx' of the fixed array field
* nonce of the trn_cell_conflux_link_payload_v1_t in 'inp', so that
* it will hold the value 'elt'.
*/
int trn_cell_conflux_link_payload_v1_set_nonce(trn_cell_conflux_link_payload_v1_t *inp, size_t idx, uint8_t elt);
/** Return a pointer to the 32-element array field nonce of 'inp'.
*/
uint8_t * trn_cell_conflux_link_payload_v1_getarray_nonce(trn_cell_conflux_link_payload_v1_t *inp);
/** As trn_cell_conflux_link_payload_v1_get_nonce, but take and return
* a const pointer
*/
const uint8_t * trn_cell_conflux_link_payload_v1_getconstarray_nonce(const trn_cell_conflux_link_payload_v1_t *inp);
/** Return the value of the last_seqno_sent field of the
* trn_cell_conflux_link_payload_v1_t in 'inp'
*/
uint64_t trn_cell_conflux_link_payload_v1_get_last_seqno_sent(const trn_cell_conflux_link_payload_v1_t *inp);
/** Set the value of the last_seqno_sent field of the
* trn_cell_conflux_link_payload_v1_t in 'inp' to 'val'. Return 0 on
* success; return -1 and set the error code on 'inp' on failure.
*/
int trn_cell_conflux_link_payload_v1_set_last_seqno_sent(trn_cell_conflux_link_payload_v1_t *inp, uint64_t val);
/** Return the value of the last_seqno_recv field of the
* trn_cell_conflux_link_payload_v1_t in 'inp'
*/
uint64_t trn_cell_conflux_link_payload_v1_get_last_seqno_recv(const trn_cell_conflux_link_payload_v1_t *inp);
/** Set the value of the last_seqno_recv field of the
* trn_cell_conflux_link_payload_v1_t in 'inp' to 'val'. Return 0 on
* success; return -1 and set the error code on 'inp' on failure.
*/
int trn_cell_conflux_link_payload_v1_set_last_seqno_recv(trn_cell_conflux_link_payload_v1_t *inp, uint64_t val);
/** Return the value of the desired_ux field of the
* trn_cell_conflux_link_payload_v1_t in 'inp'
*/
uint8_t trn_cell_conflux_link_payload_v1_get_desired_ux(const trn_cell_conflux_link_payload_v1_t *inp);
/** Set the value of the desired_ux field of the
* trn_cell_conflux_link_payload_v1_t in 'inp' to 'val'. Return 0 on
* success; return -1 and set the error code on 'inp' on failure.
*/
int trn_cell_conflux_link_payload_v1_set_desired_ux(trn_cell_conflux_link_payload_v1_t *inp, uint8_t val);
/** Return a newly allocated trn_cell_conflux_linked with all elements
* set to zero.
*/
trn_cell_conflux_linked_t *trn_cell_conflux_linked_new(void);
/** Release all storage held by the trn_cell_conflux_linked in
* 'victim'. (Do nothing if 'victim' is NULL.)
*/
void trn_cell_conflux_linked_free(trn_cell_conflux_linked_t *victim);
/** Try to parse a trn_cell_conflux_linked from the buffer in 'input',
* using up to 'len_in' bytes from the input buffer. On success,
* return the number of bytes consumed and set *output to the newly
* allocated trn_cell_conflux_linked_t. On failure, return -2 if the
* input appears truncated, and -1 if the input is otherwise invalid.
*/
ssize_t trn_cell_conflux_linked_parse(trn_cell_conflux_linked_t **output, const uint8_t *input, const size_t len_in);
/** Return the number of bytes we expect to need to encode the
* trn_cell_conflux_linked in 'obj'. On failure, return a negative
* value. Note that this value may be an overestimate, and can even be
* an underestimate for certain unencodeable objects.
*/
ssize_t trn_cell_conflux_linked_encoded_len(const trn_cell_conflux_linked_t *obj);
/** Try to encode the trn_cell_conflux_linked from 'input' into the
* buffer at 'output', using up to 'avail' bytes of the output buffer.
* On success, return the number of bytes used. On failure, return -2
* if the buffer was not long enough, and -1 if the input was invalid.
*/
ssize_t trn_cell_conflux_linked_encode(uint8_t *output, size_t avail, const trn_cell_conflux_linked_t *input);
/** Check whether the internal state of the trn_cell_conflux_linked in
* 'obj' is consistent. Return NULL if it is, and a short message if
* it is not.
*/
const char *trn_cell_conflux_linked_check(const trn_cell_conflux_linked_t *obj);
/** Clear any errors that were set on the object 'obj' by its setter
* functions. Return true iff errors were cleared.
*/
int trn_cell_conflux_linked_clear_errors(trn_cell_conflux_linked_t *obj);
/** Return the value of the version field of the
* trn_cell_conflux_linked_t in 'inp'
*/
uint8_t trn_cell_conflux_linked_get_version(const trn_cell_conflux_linked_t *inp);
/** Set the value of the version field of the
* trn_cell_conflux_linked_t in 'inp' to 'val'. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
*/
int trn_cell_conflux_linked_set_version(trn_cell_conflux_linked_t *inp, uint8_t val);
/** Return the length of the dynamic array holding the payload field
* of the trn_cell_conflux_linked_t in 'inp'.
*/
size_t trn_cell_conflux_linked_getlen_payload(const trn_cell_conflux_linked_t *inp);
/** Return the element at position 'idx' of the dynamic array field
* payload of the trn_cell_conflux_linked_t in 'inp'.
*/
uint8_t trn_cell_conflux_linked_get_payload(trn_cell_conflux_linked_t *inp, size_t idx);
/** As trn_cell_conflux_linked_get_payload, but take and return a
* const pointer
*/
uint8_t trn_cell_conflux_linked_getconst_payload(const trn_cell_conflux_linked_t *inp, size_t idx);
/** Change the element at position 'idx' of the dynamic array field
* payload of the trn_cell_conflux_linked_t in 'inp', so that it will
* hold the value 'elt'.
*/
int trn_cell_conflux_linked_set_payload(trn_cell_conflux_linked_t *inp, size_t idx, uint8_t elt);
/** Append a new element 'elt' to the dynamic array field payload of
* the trn_cell_conflux_linked_t in 'inp'.
*/
int trn_cell_conflux_linked_add_payload(trn_cell_conflux_linked_t *inp, uint8_t elt);
/** Return a pointer to the variable-length array field payload of
* 'inp'.
*/
uint8_t * trn_cell_conflux_linked_getarray_payload(trn_cell_conflux_linked_t *inp);
/** As trn_cell_conflux_linked_get_payload, but take and return a
* const pointer
*/
const uint8_t * trn_cell_conflux_linked_getconstarray_payload(const trn_cell_conflux_linked_t *inp);
/** Change the length of the variable-length array field payload of
* 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
*/
int trn_cell_conflux_linked_setlen_payload(trn_cell_conflux_linked_t *inp, size_t newlen);
/** Return a newly allocated trn_cell_conflux_linked_ack with all
* elements set to zero.
*/
trn_cell_conflux_linked_ack_t *trn_cell_conflux_linked_ack_new(void);
/** Release all storage held by the trn_cell_conflux_linked_ack in
* 'victim'. (Do nothing if 'victim' is NULL.)
*/
void trn_cell_conflux_linked_ack_free(trn_cell_conflux_linked_ack_t *victim);
/** Try to parse a trn_cell_conflux_linked_ack from the buffer in
* 'input', using up to 'len_in' bytes from the input buffer. On
* success, return the number of bytes consumed and set *output to the
* newly allocated trn_cell_conflux_linked_ack_t. On failure, return
* -2 if the input appears truncated, and -1 if the input is otherwise
* invalid.
*/
ssize_t trn_cell_conflux_linked_ack_parse(trn_cell_conflux_linked_ack_t **output, const uint8_t *input, const size_t len_in);
/** Return the number of bytes we expect to need to encode the
* trn_cell_conflux_linked_ack in 'obj'. On failure, return a negative
* value. Note that this value may be an overestimate, and can even be
* an underestimate for certain unencodeable objects.
*/
ssize_t trn_cell_conflux_linked_ack_encoded_len(const trn_cell_conflux_linked_ack_t *obj);
/** Try to encode the trn_cell_conflux_linked_ack from 'input' into
* the buffer at 'output', using up to 'avail' bytes of the output
* buffer. On success, return the number of bytes used. On failure,
* return -2 if the buffer was not long enough, and -1 if the input
* was invalid.
*/
ssize_t trn_cell_conflux_linked_ack_encode(uint8_t *output, size_t avail, const trn_cell_conflux_linked_ack_t *input);
/** Check whether the internal state of the
* trn_cell_conflux_linked_ack in 'obj' is consistent. Return NULL if
* it is, and a short message if it is not.
*/
const char *trn_cell_conflux_linked_ack_check(const trn_cell_conflux_linked_ack_t *obj);
/** Clear any errors that were set on the object 'obj' by its setter
* functions. Return true iff errors were cleared.
*/
int trn_cell_conflux_linked_ack_clear_errors(trn_cell_conflux_linked_ack_t *obj);
/** Return the length of the dynamic array holding the payload field
* of the trn_cell_conflux_linked_ack_t in 'inp'.
*/
size_t trn_cell_conflux_linked_ack_getlen_payload(const trn_cell_conflux_linked_ack_t *inp);
/** Return the element at position 'idx' of the dynamic array field
* payload of the trn_cell_conflux_linked_ack_t in 'inp'.
*/
uint8_t trn_cell_conflux_linked_ack_get_payload(trn_cell_conflux_linked_ack_t *inp, size_t idx);
/** As trn_cell_conflux_linked_ack_get_payload, but take and return a
* const pointer
*/
uint8_t trn_cell_conflux_linked_ack_getconst_payload(const trn_cell_conflux_linked_ack_t *inp, size_t idx);
/** Change the element at position 'idx' of the dynamic array field
* payload of the trn_cell_conflux_linked_ack_t in 'inp', so that it
* will hold the value 'elt'.
*/
int trn_cell_conflux_linked_ack_set_payload(trn_cell_conflux_linked_ack_t *inp, size_t idx, uint8_t elt);
/** Append a new element 'elt' to the dynamic array field payload of
* the trn_cell_conflux_linked_ack_t in 'inp'.
*/
int trn_cell_conflux_linked_ack_add_payload(trn_cell_conflux_linked_ack_t *inp, uint8_t elt);
/** Return a pointer to the variable-length array field payload of
* 'inp'.
*/
uint8_t * trn_cell_conflux_linked_ack_getarray_payload(trn_cell_conflux_linked_ack_t *inp);
/** As trn_cell_conflux_linked_ack_get_payload, but take and return a
* const pointer
*/
const uint8_t * trn_cell_conflux_linked_ack_getconstarray_payload(const trn_cell_conflux_linked_ack_t *inp);
/** Change the length of the variable-length array field payload of
* 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
*/
int trn_cell_conflux_linked_ack_setlen_payload(trn_cell_conflux_linked_ack_t *inp, size_t newlen);
/** Return a newly allocated trn_cell_conflux_switch with all elements
* set to zero.
*/
trn_cell_conflux_switch_t *trn_cell_conflux_switch_new(void);
/** Release all storage held by the trn_cell_conflux_switch in
* 'victim'. (Do nothing if 'victim' is NULL.)
*/
void trn_cell_conflux_switch_free(trn_cell_conflux_switch_t *victim);
/** Try to parse a trn_cell_conflux_switch from the buffer in 'input',
* using up to 'len_in' bytes from the input buffer. On success,
* return the number of bytes consumed and set *output to the newly
* allocated trn_cell_conflux_switch_t. On failure, return -2 if the
* input appears truncated, and -1 if the input is otherwise invalid.
*/
ssize_t trn_cell_conflux_switch_parse(trn_cell_conflux_switch_t **output, const uint8_t *input, const size_t len_in);
/** Return the number of bytes we expect to need to encode the
* trn_cell_conflux_switch in 'obj'. On failure, return a negative
* value. Note that this value may be an overestimate, and can even be
* an underestimate for certain unencodeable objects.
*/
ssize_t trn_cell_conflux_switch_encoded_len(const trn_cell_conflux_switch_t *obj);
/** Try to encode the trn_cell_conflux_switch from 'input' into the
* buffer at 'output', using up to 'avail' bytes of the output buffer.
* On success, return the number of bytes used. On failure, return -2
* if the buffer was not long enough, and -1 if the input was invalid.
*/
ssize_t trn_cell_conflux_switch_encode(uint8_t *output, size_t avail, const trn_cell_conflux_switch_t *input);
/** Check whether the internal state of the trn_cell_conflux_switch in
* 'obj' is consistent. Return NULL if it is, and a short message if
* it is not.
*/
const char *trn_cell_conflux_switch_check(const trn_cell_conflux_switch_t *obj);
/** Clear any errors that were set on the object 'obj' by its setter
* functions. Return true iff errors were cleared.
*/
int trn_cell_conflux_switch_clear_errors(trn_cell_conflux_switch_t *obj);
/** Return the value of the seqnum field of the
* trn_cell_conflux_switch_t in 'inp'
*/
uint32_t trn_cell_conflux_switch_get_seqnum(const trn_cell_conflux_switch_t *inp);
/** Set the value of the seqnum field of the trn_cell_conflux_switch_t
* in 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
*/
int trn_cell_conflux_switch_set_seqnum(trn_cell_conflux_switch_t *inp, uint32_t val);
#endif

View File

@ -0,0 +1,66 @@
/*
* This file contains the definition for the Conflux related cells. See
* proposal 329.
*/
/* No Opinion means the endpoint can choose whatever it thinks is best. */
const CONFLUX_UX_NO_OPINION = 0x00;
/* Min latency always only uses the lowest RTT */
const CONFLUX_UX_MIN_LATENCY = 0x01;
/* Min latency always only uses the lowest RTT */
const CONFLUX_UX_LOW_MEM_LATENCY = 0x02;
/* Use a high-throughput algorithm that maximizes throughput
* by using the full congestion window of all circuits, at the expense
* of more reordering queue at the receiver */
const CONFLUX_UX_HIGH_THROUGHPUT = 0x03;
/* THRPT_LO uses a high-throughput algorithm that tries to minimize
* out-of-order queues at the receiver */
const CONFLUX_UX_LOW_MEM_THROUGHPUT = 0x04;
/* The RELAY_CONFLUX_LINK definition. */
struct trn_cell_conflux_link {
/* Version field. */
u8 version IN [0x01];
/* Payload */
u8 payload[];
};
/* The RELAY_CIRCUIT_LINKED definition. */
struct trn_cell_conflux_linked {
/* Version field. */
u8 version IN [0x01];
/* Payload of the cell. */
u8 payload[];
};
/* The RELAY_CONFLUX_LINKED_ACK definition. */
struct trn_cell_conflux_linked_ack {
/* Payload. At the moment, empty. */
u8 payload[];
};
/* The RELAY_CONFLUX_SWITCH definition. */
struct trn_cell_conflux_switch {
/* Relative sequence number. */
u32 seqnum;
};
/* The payload version 1 of RELAY_CONFLUX_LINK and RELAY_CIRCUIT_LINKED cells.
* */
struct trn_cell_conflux_link_payload_v1 {
/* Used to identify the other conflux to link with. */
u8 nonce[32];
/* Last sequence number sent and received. */
u64 last_seqno_sent;
u64 last_seqno_recv;
/* Desired user experience behavior */
u8 desired_ux IN [CONFLUX_UX_NO_OPINION,
CONFLUX_UX_MIN_LATENCY,
CONFLUX_UX_LOW_MEM_LATENCY,
CONFLUX_UX_LOW_MEM_THROUGHPUT,
CONFLUX_UX_HIGH_THROUGHPUT];
};

View File

@ -16,7 +16,8 @@ TRUNNELINPUTS = \
src/trunnel/flow_control_cells.trunnel \
src/trunnel/congestion_control.trunnel \
src/trunnel/socks5.trunnel \
src/trunnel/circpad_negotiation.trunnel
src/trunnel/circpad_negotiation.trunnel \
src/trunnel/conflux.trunnel
TRUNNELSOURCES = \
src/ext/trunnel/trunnel.c \
@ -33,7 +34,8 @@ TRUNNELSOURCES = \
src/trunnel/congestion_control.c \
src/trunnel/socks5.c \
src/trunnel/netinfo.c \
src/trunnel/circpad_negotiation.c
src/trunnel/circpad_negotiation.c \
src/trunnel/conflux.c
TRUNNELHEADERS = \
src/ext/trunnel/trunnel.h \
@ -52,7 +54,8 @@ TRUNNELHEADERS = \
src/trunnel/congestion_control.h \
src/trunnel/socks5.h \
src/trunnel/netinfo.h \
src/trunnel/circpad_negotiation.h
src/trunnel/circpad_negotiation.h \
src/trunnel/conflux.h
src_trunnel_libor_trunnel_a_SOURCES = $(TRUNNELSOURCES)
src_trunnel_libor_trunnel_a_CPPFLAGS = \