Lines Matching defs:ao
54 struct tcp_ao_info *ao;
83 ao = rcu_dereference(tcp_twsk(sk)->ao_info);
95 ao = rcu_dereference(tcp_sk(sk)->ao_info);
98 if (ao && !ao->accept_icmps) {
101 atomic64_inc(&ao->counters.dropped_icmp);
113 struct tcp_ao_info *ao,
118 hlist_for_each_entry_rcu(key, &ao->head, node, lockdep_sock_is_held(sk)) {
199 struct tcp_ao_info *ao;
204 ao = rcu_dereference_check(tcp_sk(sk)->ao_info,
206 if (!ao)
209 hlist_for_each_entry_rcu(key, &ao->head, node, lockdep_sock_is_held(sk)) {
228 struct tcp_ao_info *ao;
230 ao = kzalloc(sizeof(*ao), flags);
231 if (!ao)
233 INIT_HLIST_HEAD(&ao->head);
234 refcount_set(&ao->refcnt, 1);
236 return ao;
239 static void tcp_ao_link_mkt(struct tcp_ao_info *ao, struct tcp_ao_key *mkt)
241 hlist_add_head_rcu(&mkt->node, &ao->head);
271 static void tcp_ao_info_free(struct tcp_ao_info *ao)
276 hlist_for_each_entry_safe(key, n, &ao->head, node) {
281 kfree(ao);
285 static void tcp_ao_sk_omem_free(struct sock *sk, struct tcp_ao_info *ao)
290 hlist_for_each_entry(key, &ao->head, node)
297 struct tcp_ao_info *ao;
300 ao = rcu_dereference_protected(tcp_twsk(sk)->ao_info, 1);
303 ao = rcu_dereference_protected(tcp_sk(sk)->ao_info, 1);
307 if (!ao || !refcount_dec_and_test(&ao->refcnt))
311 tcp_ao_sk_omem_free(sk, ao);
312 tcp_ao_info_free(ao);
547 /* zero out tcp-ao hash */
814 struct tcp_ao_info *ao;
819 ao = rcu_dereference_protected(tcp_sk(sk)->ao_info,
832 disn = ao->risn;
835 sk, ao->lisn, disn, true);
837 sne = tcp_ao_compute_sne(READ_ONCE(ao->snd_sne), READ_ONCE(tp->snd_una),
1076 struct tcp_ao_info *ao,
1083 ao->lisn, ao->risn, true);
1089 ao->lisn, ao->risn, false);
1148 * at least one tcp-ao key that matches the remote peer.
1158 struct tcp_ao_info *ao;
1161 ao = rcu_dereference_protected(tcp_sk(sk)->ao_info,
1163 if (!ao)
1166 hlist_for_each_entry_rcu(key, &ao->head, node, lockdep_sock_is_held(sk))
1167 tcp_ao_cache_traffic_keys(sk, ao, key);
1172 struct tcp_ao_info *ao;
1175 ao = rcu_dereference_protected(tcp_sk(sk)->ao_info,
1177 if (!ao)
1182 WRITE_ONCE(ao->risn, tcp_hdr(skb)->seq);
1183 ao->rcv_sne = 0;
1185 hlist_for_each_entry_rcu(key, &ao->head, node, lockdep_sock_is_held(sk))
1186 tcp_ao_cache_traffic_keys(sk, ao, key);
1194 struct tcp_ao_info *new_ao, *ao;
1200 ao = rcu_dereference(tcp_sk(sk)->ao_info);
1201 if (!ao)
1213 new_ao->ao_required = ao->ao_required;
1214 new_ao->accept_icmps = ao->accept_icmps;
1229 hlist_for_each_entry_rcu(key, &ao->head, node) {
1358 /* Check: maclen + tcp-ao header <= (MAX_TCP_OPTION_SPACE - mss
2324 struct tcp_ao_info *ao;
2344 ao = setsockopt_ao_info(sk);
2345 if (IS_ERR(ao))
2346 return PTR_ERR(ao);
2347 if (!ao)
2351 out.ao_required = ao->ao_required;
2352 out.accept_icmps = ao->accept_icmps;
2353 out.pkt_good = atomic64_read(&ao->counters.pkt_good);
2354 out.pkt_bad = atomic64_read(&ao->counters.pkt_bad);
2355 out.pkt_key_not_found = atomic64_read(&ao->counters.key_not_found);
2356 out.pkt_ao_required = atomic64_read(&ao->counters.ao_required);
2357 out.pkt_dropped_icmp = atomic64_read(&ao->counters.dropped_icmp);
2359 current_key = READ_ONCE(ao->current_key);
2364 if (ao->rnext_key) {
2366 out.rnext = ao->rnext_key->rcvid;
2380 struct tcp_ao_info *ao;
2393 ao = setsockopt_ao_info(sk);
2394 if (IS_ERR(ao))
2395 return PTR_ERR(ao);
2396 if (!ao)
2399 WRITE_ONCE(ao->lisn, cmd.snt_isn);
2400 WRITE_ONCE(ao->risn, cmd.rcv_isn);
2401 WRITE_ONCE(ao->snd_sne, cmd.snd_sne);
2402 WRITE_ONCE(ao->rcv_sne, cmd.rcv_sne);
2404 hlist_for_each_entry_rcu(key, &ao->head, node, lockdep_sock_is_held(sk))
2405 tcp_ao_cache_traffic_keys(sk, ao, key);
2414 struct tcp_ao_info *ao;
2427 ao = getsockopt_ao_info(sk);
2428 if (IS_ERR_OR_NULL(ao)) {
2430 return ao ? PTR_ERR(ao) : -ENOENT;
2433 opt.snt_isn = ao->lisn;
2434 opt.rcv_isn = ao->risn;
2435 opt.snd_sne = READ_ONCE(ao->snd_sne);
2436 opt.rcv_sne = READ_ONCE(ao->rcv_sne);