Release 4.15 net/x25/x25_timer.c
/*
* X.25 Packet Layer release 002
*
* This is ALPHA test software. This code may break your machine,
* randomly fail to work with new releases, misbehave and/or generally
* screw up. It might even work.
*
* This code REQUIRES 2.1.15 or higher
*
* This module:
* This module is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* History
* X.25 001 Jonathan Naylor Started coding.
* X.25 002 Jonathan Naylor New timer architecture.
* Centralised disconnection processing.
*/
#include <linux/errno.h>
#include <linux/jiffies.h>
#include <linux/timer.h>
#include <net/sock.h>
#include <net/tcp_states.h>
#include <net/x25.h>
static void x25_heartbeat_expiry(struct timer_list *t);
static void x25_timer_expiry(struct timer_list *t);
void x25_init_timers(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
timer_setup(&x25->timer, x25_timer_expiry, 0);
/* initialized by sock_init_data */
sk->sk_timer.function = x25_heartbeat_expiry;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 18 | 43.90% | 1 | 16.67% |
Vinay K. Nallamothu | 15 | 36.59% | 1 | 16.67% |
Pavel Emelyanov | 4 | 9.76% | 1 | 16.67% |
Arnaldo Carvalho de Melo | 2 | 4.88% | 2 | 33.33% |
Kees Cook | 2 | 4.88% | 1 | 16.67% |
Total | 41 | 100.00% | 6 | 100.00% |
void x25_start_heartbeat(struct sock *sk)
{
mod_timer(&sk->sk_timer, jiffies + 5 * HZ);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Vinay K. Nallamothu | 13 | 54.17% | 1 | 33.33% |
Linus Torvalds (pre-git) | 10 | 41.67% | 1 | 33.33% |
Arnaldo Carvalho de Melo | 1 | 4.17% | 1 | 33.33% |
Total | 24 | 100.00% | 3 | 100.00% |
void x25_stop_heartbeat(struct sock *sk)
{
del_timer(&sk->sk_timer);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 17 | 94.44% | 1 | 50.00% |
Arnaldo Carvalho de Melo | 1 | 5.56% | 1 | 50.00% |
Total | 18 | 100.00% | 2 | 100.00% |
void x25_start_t2timer(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
mod_timer(&x25->timer, jiffies + x25->t2);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 22 | 64.71% | 1 | 20.00% |
David S. Miller | 8 | 23.53% | 1 | 20.00% |
Arnaldo Carvalho de Melo | 2 | 5.88% | 2 | 40.00% |
Vinay K. Nallamothu | 2 | 5.88% | 1 | 20.00% |
Total | 34 | 100.00% | 5 | 100.00% |
void x25_start_t21timer(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
mod_timer(&x25->timer, jiffies + x25->t21);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 22 | 64.71% | 1 | 20.00% |
David S. Miller | 8 | 23.53% | 1 | 20.00% |
Vinay K. Nallamothu | 2 | 5.88% | 1 | 20.00% |
Arnaldo Carvalho de Melo | 2 | 5.88% | 2 | 40.00% |
Total | 34 | 100.00% | 5 | 100.00% |
void x25_start_t22timer(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
mod_timer(&x25->timer, jiffies + x25->t22);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 22 | 64.71% | 1 | 20.00% |
David S. Miller | 8 | 23.53% | 1 | 20.00% |
Vinay K. Nallamothu | 2 | 5.88% | 1 | 20.00% |
Arnaldo Carvalho de Melo | 2 | 5.88% | 2 | 40.00% |
Total | 34 | 100.00% | 5 | 100.00% |
void x25_start_t23timer(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
mod_timer(&x25->timer, jiffies + x25->t23);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 22 | 64.71% | 2 | 33.33% |
David S. Miller | 8 | 23.53% | 1 | 16.67% |
Arnaldo Carvalho de Melo | 2 | 5.88% | 2 | 33.33% |
Vinay K. Nallamothu | 2 | 5.88% | 1 | 16.67% |
Total | 34 | 100.00% | 6 | 100.00% |
void x25_stop_timer(struct sock *sk)
{
del_timer(&x25_sk(sk)->timer);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 18 | 85.71% | 1 | 50.00% |
David S. Miller | 3 | 14.29% | 1 | 50.00% |
Total | 21 | 100.00% | 2 | 100.00% |
unsigned long x25_display_timer(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
if (!timer_pending(&x25->timer))
return 0;
return x25->timer.expires - jiffies;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 34 | 77.27% | 2 | 40.00% |
David S. Miller | 8 | 18.18% | 1 | 20.00% |
Arnaldo Carvalho de Melo | 2 | 4.55% | 2 | 40.00% |
Total | 44 | 100.00% | 5 | 100.00% |
static void x25_heartbeat_expiry(struct timer_list *t)
{
struct sock *sk = from_timer(sk, t, sk_timer);
bh_lock_sock(sk);
if (sock_owned_by_user(sk)) /* can currently only occur in state 3 */
goto restart_heartbeat;
switch (x25_sk(sk)->state) {
case X25_STATE_0:
/*
* Magic here: If we listen() and a new link dies
* before it is accepted() it isn't 'dead' so doesn't
* get removed.
*/
if (sock_flag(sk, SOCK_DESTROY) ||
(sk->sk_state == TCP_LISTEN &&
sock_flag(sk, SOCK_DEAD))) {
bh_unlock_sock(sk);
x25_destroy_socket_from_timer(sk);
return;
}
break;
case X25_STATE_3:
/*
* Check for the state of the receive buffer.
*/
x25_check_rbuf(sk);
break;
}
restart_heartbeat:
x25_start_heartbeat(sk);
bh_unlock_sock(sk);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 59 | 50.86% | 3 | 25.00% |
Linus Torvalds | 20 | 17.24% | 1 | 8.33% |
Kees Cook | 12 | 10.34% | 1 | 8.33% |
Arnaldo Carvalho de Melo | 8 | 6.90% | 2 | 16.67% |
Shaun Pereira | 6 | 5.17% | 1 | 8.33% |
James Morris | 4 | 3.45% | 1 | 8.33% |
David S. Miller | 4 | 3.45% | 2 | 16.67% |
Benjamin LaHaise | 3 | 2.59% | 1 | 8.33% |
Total | 116 | 100.00% | 12 | 100.00% |
/*
* Timer has expired, it may have been T2, T21, T22, or T23. We can tell
* by the state machine state.
*/
static inline void x25_do_timer_expiry(struct sock * sk)
{
struct x25_sock *x25 = x25_sk(sk);
switch (x25->state) {
case X25_STATE_3: /* T2 */
if (x25->condition & X25_COND_ACK_PENDING) {
x25->condition &= ~X25_COND_ACK_PENDING;
x25_enquiry_response(sk);
}
break;
case X25_STATE_1: /* T21 */
case X25_STATE_4: /* T22 */
x25_write_internal(sk, X25_CLEAR_REQUEST);
x25->state = X25_STATE_2;
x25_start_t23timer(sk);
break;
case X25_STATE_2: /* T23 */
x25_disconnect(sk, ETIMEDOUT, 0, 0);
break;
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 86 | 86.00% | 2 | 33.33% |
David S. Miller | 8 | 8.00% | 1 | 16.67% |
Linus Torvalds | 4 | 4.00% | 1 | 16.67% |
Arnaldo Carvalho de Melo | 2 | 2.00% | 2 | 33.33% |
Total | 100 | 100.00% | 6 | 100.00% |
static void x25_timer_expiry(struct timer_list *t)
{
struct x25_sock *x25 = from_timer(x25, t, timer);
struct sock *sk = &x25->sk;
bh_lock_sock(sk);
if (sock_owned_by_user(sk)) { /* can currently only occur in state 3 */
if (x25_sk(sk)->state == X25_STATE_3)
x25_start_t2timer(sk);
} else
x25_do_timer_expiry(sk);
bh_unlock_sock(sk);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds | 49 | 63.64% | 1 | 25.00% |
Kees Cook | 22 | 28.57% | 1 | 25.00% |
David S. Miller | 3 | 3.90% | 1 | 25.00% |
Benjamin LaHaise | 3 | 3.90% | 1 | 25.00% |
Total | 77 | 100.00% | 4 | 100.00% |
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 357 | 57.86% | 4 | 20.00% |
Linus Torvalds | 73 | 11.83% | 1 | 5.00% |
David S. Miller | 60 | 9.72% | 2 | 10.00% |
Kees Cook | 44 | 7.13% | 1 | 5.00% |
Vinay K. Nallamothu | 36 | 5.83% | 1 | 5.00% |
Arnaldo Carvalho de Melo | 25 | 4.05% | 5 | 25.00% |
Benjamin LaHaise | 6 | 0.97% | 1 | 5.00% |
Shaun Pereira | 6 | 0.97% | 1 | 5.00% |
Pavel Emelyanov | 4 | 0.65% | 1 | 5.00% |
James Morris | 4 | 0.65% | 1 | 5.00% |
Rusty Russell | 1 | 0.16% | 1 | 5.00% |
Hideaki Yoshifuji / 吉藤英明 | 1 | 0.16% | 1 | 5.00% |
Total | 617 | 100.00% | 20 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.