cregit-Linux how code gets into the kernel

Release 4.14 net/lapb/lapb_timer.c

Directory: net/lapb
/*
 *      LAPB release 002
 *
 *      This code REQUIRES 2.1.15 or higher/ NET3.038
 *
 *      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
 *      LAPB 001        Jonathan Naylor Started Coding
 *      LAPB 002        Jonathan Naylor New timer architecture.
 */


#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/errno.h>
#include <linux/types.h>
#include <linux/socket.h>
#include <linux/in.h>
#include <linux/kernel.h>
#include <linux/jiffies.h>
#include <linux/timer.h>
#include <linux/string.h>
#include <linux/sockios.h>
#include <linux/net.h>
#include <linux/inet.h>
#include <linux/skbuff.h>
#include <net/sock.h>
#include <linux/uaccess.h>
#include <linux/fcntl.h>
#include <linux/mm.h>
#include <linux/interrupt.h>
#include <net/lapb.h>

static void lapb_t1timer_expiry(unsigned long);
static void lapb_t2timer_expiry(unsigned long);


void lapb_start_t1timer(struct lapb_cb *lapb) { del_timer(&lapb->t1timer); lapb->t1timer.data = (unsigned long)lapb; lapb->t1timer.function = &lapb_t1timer_expiry; lapb->t1timer.expires = jiffies + lapb->t1; add_timer(&lapb->t1timer); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)5898.31%266.67%
Arnaldo Carvalho de Melo11.69%133.33%
Total59100.00%3100.00%


void lapb_start_t2timer(struct lapb_cb *lapb) { del_timer(&lapb->t2timer); lapb->t2timer.data = (unsigned long)lapb; lapb->t2timer.function = &lapb_t2timer_expiry; lapb->t2timer.expires = jiffies + lapb->t2; add_timer(&lapb->t2timer); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)5898.31%375.00%
Arnaldo Carvalho de Melo11.69%125.00%
Total59100.00%4100.00%


void lapb_stop_t1timer(struct lapb_cb *lapb) { del_timer(&lapb->t1timer); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1794.44%266.67%
Arnaldo Carvalho de Melo15.56%133.33%
Total18100.00%3100.00%


void lapb_stop_t2timer(struct lapb_cb *lapb) { del_timer(&lapb->t2timer); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1794.44%266.67%
Arnaldo Carvalho de Melo15.56%133.33%
Total18100.00%3100.00%


int lapb_t1timer_running(struct lapb_cb *lapb) { return timer_pending(&lapb->t1timer); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1894.74%375.00%
Arnaldo Carvalho de Melo15.26%125.00%
Total19100.00%4100.00%


static void lapb_t2timer_expiry(unsigned long param) { struct lapb_cb *lapb = (struct lapb_cb *)param; if (lapb->condition & LAPB_ACK_PENDING_CONDITION) { lapb->condition &= ~LAPB_ACK_PENDING_CONDITION; lapb_timeout_response(lapb); } }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)4295.45%266.67%
Arnaldo Carvalho de Melo24.55%133.33%
Total44100.00%3100.00%


static void lapb_t1timer_expiry(unsigned long param) { struct lapb_cb *lapb = (struct lapb_cb *)param; switch (lapb->state) { /* * If we are a DCE, keep going DM .. DM .. DM */ case LAPB_STATE_0: if (lapb->mode & LAPB_DCE) lapb_send_control(lapb, LAPB_DM, LAPB_POLLOFF, LAPB_RESPONSE); break; /* * Awaiting connection state, send SABM(E), up to N2 times. */ case LAPB_STATE_1: if (lapb->n2count == lapb->n2) { lapb_clear_queues(lapb); lapb->state = LAPB_STATE_0; lapb_disconnect_indication(lapb, LAPB_TIMEDOUT); lapb_dbg(0, "(%p) S1 -> S0\n", lapb->dev); return; } else { lapb->n2count++; if (lapb->mode & LAPB_EXTENDED) { lapb_dbg(1, "(%p) S1 TX SABME(1)\n", lapb->dev); lapb_send_control(lapb, LAPB_SABME, LAPB_POLLON, LAPB_COMMAND); } else { lapb_dbg(1, "(%p) S1 TX SABM(1)\n", lapb->dev); lapb_send_control(lapb, LAPB_SABM, LAPB_POLLON, LAPB_COMMAND); } } break; /* * Awaiting disconnection state, send DISC, up to N2 times. */ case LAPB_STATE_2: if (lapb->n2count == lapb->n2) { lapb_clear_queues(lapb); lapb->state = LAPB_STATE_0; lapb_disconnect_confirmation(lapb, LAPB_TIMEDOUT); lapb_dbg(0, "(%p) S2 -> S0\n", lapb->dev); return; } else { lapb->n2count++; lapb_dbg(1, "(%p) S2 TX DISC(1)\n", lapb->dev); lapb_send_control(lapb, LAPB_DISC, LAPB_POLLON, LAPB_COMMAND); } break; /* * Data transfer state, restransmit I frames, up to N2 times. */ case LAPB_STATE_3: if (lapb->n2count == lapb->n2) { lapb_clear_queues(lapb); lapb->state = LAPB_STATE_0; lapb_stop_t2timer(lapb); lapb_disconnect_indication(lapb, LAPB_TIMEDOUT); lapb_dbg(0, "(%p) S3 -> S0\n", lapb->dev); return; } else { lapb->n2count++; lapb_requeue_frames(lapb); lapb_kick(lapb); } break; /* * Frame reject state, restransmit FRMR frames, up to N2 times. */ case LAPB_STATE_4: if (lapb->n2count == lapb->n2) { lapb_clear_queues(lapb); lapb->state = LAPB_STATE_0; lapb_disconnect_indication(lapb, LAPB_TIMEDOUT); lapb_dbg(0, "(%p) S4 -> S0\n", lapb->dev); return; } else { lapb->n2count++; lapb_transmit_frmr(lapb); } break; } lapb_start_t1timer(lapb); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)33688.89%450.00%
Joe Perches287.41%112.50%
Al Viro71.85%112.50%
Josselin Costanzi51.32%112.50%
Arnaldo Carvalho de Melo20.53%112.50%
Total378100.00%8100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)61591.38%545.45%
Joe Perches355.20%19.09%
Arnaldo Carvalho de Melo91.34%19.09%
Al Viro71.04%19.09%
Josselin Costanzi50.74%19.09%
Linus Torvalds10.15%19.09%
Rusty Russell10.15%19.09%
Total673100.00%11100.00%
Directory: net/lapb
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.