Release 4.11 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(unsigned long);
static void x25_timer_expiry(unsigned long);
void x25_init_timers(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
setup_timer(&x25->timer, x25_timer_expiry, (unsigned long)sk);
/* initialized by sock_init_data */
sk->sk_timer.data = (unsigned long)sk;
sk->sk_timer.function = &x25_heartbeat_expiry;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 30 | 51.72% | 1 | 20.00% |
Vinay K. Nallamothu | 20 | 34.48% | 1 | 20.00% |
Pavel Emelyanov | 5 | 8.62% | 1 | 20.00% |
Arnaldo Carvalho de Melo | 3 | 5.17% | 2 | 40.00% |
Total | 58 | 100.00% | 5 | 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% |
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_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(unsigned long param)
{
struct sock *sk = (struct sock *)param;
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) | 68 | 60.18% | 3 | 27.27% |
Linus Torvalds | 20 | 17.70% | 1 | 9.09% |
Arnaldo Carvalho de Melo | 8 | 7.08% | 2 | 18.18% |
Shaun Pereira | 6 | 5.31% | 1 | 9.09% |
David S. Miller | 4 | 3.54% | 2 | 18.18% |
James Morris | 4 | 3.54% | 1 | 9.09% |
Benjamin LaHaise | 3 | 2.65% | 1 | 9.09% |
Total | 113 | 100.00% | 11 | 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(unsigned long param)
{
struct sock *sk = (struct sock *)param;
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 | 58 | 90.62% | 1 | 33.33% |
David S. Miller | 3 | 4.69% | 1 | 33.33% |
Benjamin LaHaise | 3 | 4.69% | 1 | 33.33% |
Total | 64 | 100.00% | 3 | 100.00% |
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 382 | 62.21% | 4 | 21.05% |
Linus Torvalds | 82 | 13.36% | 1 | 5.26% |
David S. Miller | 60 | 9.77% | 2 | 10.53% |
Vinay K. Nallamothu | 41 | 6.68% | 1 | 5.26% |
Arnaldo Carvalho de Melo | 26 | 4.23% | 5 | 26.32% |
Benjamin LaHaise | 6 | 0.98% | 1 | 5.26% |
Shaun Pereira | 6 | 0.98% | 1 | 5.26% |
Pavel Emelyanov | 5 | 0.81% | 1 | 5.26% |
James Morris | 4 | 0.65% | 1 | 5.26% |
Hideaki Yoshifuji / 吉藤英明 | 1 | 0.16% | 1 | 5.26% |
Rusty Russell | 1 | 0.16% | 1 | 5.26% |
Total | 614 | 100.00% | 19 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.