On 5/14/25 3:56 PM, chia-yu.ch...@nokia-bell-labs.com wrote: > @@ -603,7 +614,23 @@ static bool tcp_accecn_process_option(struct tcp_sock > *tp, > unsigned int i; > u8 *ptr; > > + if (tcp_accecn_opt_fail_recv(tp)) > + return false; > + > if (!(flag & FLAG_SLOWPATH) || !tp->rx_opt.accecn) { > + if (!tp->saw_accecn_opt) { > + /* Too late to enable after this point due to > + * potential counter wraps > + */ > + if (tp->bytes_sent >= (1 << 23) - 1) { > + u8 fail_mode = TCP_ACCECN_OPT_FAIL_RECV; > + > + tp->saw_accecn_opt = TCP_ACCECN_OPT_FAIL_SEEN; > + tcp_accecn_fail_mode_set(tp, fail_mode);
Similar code above, possibly an helper could be used. > + } > + return false; > + } > + > if (estimate_ecnfield) { > u8 ecnfield = estimate_ecnfield - 1; > > @@ -619,6 +646,13 @@ static bool tcp_accecn_process_option(struct tcp_sock > *tp, > order1 = (ptr[0] == TCPOPT_ACCECN1); > ptr += 2; > > + if (tp->saw_accecn_opt < TCP_ACCECN_OPT_COUNTER_SEEN) { > + tp->saw_accecn_opt = tcp_accecn_option_init(skb, > + tp->rx_opt.accecn); > + if (tp->saw_accecn_opt == TCP_ACCECN_OPT_FAIL_SEEN) > + tcp_accecn_fail_mode_set(tp, TCP_ACCECN_OPT_FAIL_RECV); > + } > + > res = !!estimate_ecnfield; > for (i = 0; i < 3; i++) { > if (optlen < TCPOLEN_ACCECN_PERFIELD) > @@ -6481,10 +6515,25 @@ static bool tcp_validate_incoming(struct sock *sk, > struct sk_buff *skb, > */ > if (th->syn) { > if (tcp_ecn_mode_accecn(tp)) { > - u8 opt_demand = max_t(u8, 1, tp->accecn_opt_demand); > - > accecn_reflector = true; > - tp->accecn_opt_demand = opt_demand; > + if (tp->rx_opt.accecn && > + tp->saw_accecn_opt < TCP_ACCECN_OPT_COUNTER_SEEN) { > + u8 offset = tp->rx_opt.accecn; > + u8 opt_demand; > + u8 saw_opt; > + > + saw_opt = tcp_accecn_option_init(skb, offset); > + tp->saw_accecn_opt = saw_opt; > + if (tp->saw_accecn_opt == > + TCP_ACCECN_OPT_FAIL_SEEN) { > + u8 fail_mode = TCP_ACCECN_OPT_FAIL_RECV; > + > + tcp_accecn_fail_mode_set(tp, fail_mode); > + } > + opt_demand = max_t(u8, 1, > + tp->accecn_opt_demand); > + tp->accecn_opt_demand = opt_demand; > + } > } Too many indentation levels, please move into a separate helper /P