cregit-Linux how code gets into the kernel

Release 4.11 net/netrom/nr_loopback.c

Directory: net/netrom
/*
 * This program 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.
 *
 * Copyright Tomi Manninen OH2BNS (oh2bns@sral.fi)
 */
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/socket.h>
#include <linux/timer.h>
#include <net/ax25.h>
#include <linux/skbuff.h>
#include <net/netrom.h>
#include <linux/init.h>

static void nr_loopback_timer(unsigned long);


static struct sk_buff_head loopback_queue;
static DEFINE_TIMER(loopback_timer, nr_loopback_timer, 0, 0);


void __init nr_loopback_init(void) { skb_queue_head_init(&loopback_queue); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1392.86%150.00%
Vinay K. Nallamothu17.14%150.00%
Total14100.00%2100.00%


static inline int nr_loopback_running(void) { return timer_pending(&loopback_timer); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1593.75%266.67%
Vinay K. Nallamothu16.25%133.33%
Total16100.00%3100.00%


int nr_loopback_queue(struct sk_buff *skb) { struct sk_buff *skbn; if ((skbn = alloc_skb(skb->len, GFP_ATOMIC)) != NULL) { skb_copy_from_linear_data(skb, skb_put(skbn, skb->len), skb->len); skb_reset_transport_header(skbn); skb_queue_tail(&loopback_queue, skbn); if (!nr_loopback_running()) mod_timer(&loopback_timer, jiffies + 10); } kfree_skb(skb); return 1; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)7483.15%240.00%
Vinay K. Nallamothu910.11%120.00%
Arnaldo Carvalho de Melo66.74%240.00%
Total89100.00%5100.00%


static void nr_loopback_timer(unsigned long param) { struct sk_buff *skb; ax25_address *nr_dest; struct net_device *dev; if ((skb = skb_dequeue(&loopback_queue)) != NULL) { nr_dest = (ax25_address *)(skb->data + 7); dev = nr_dev_get(nr_dest); if (dev == NULL || nr_rx_frame(skb, dev) == 0) kfree_skb(skb); if (dev != NULL) dev_put(dev); if (!skb_queue_empty(&loopback_queue) && !nr_loopback_running()) mod_timer(&loopback_timer, jiffies + 10); } }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)9582.61%360.00%
Dave Jones119.57%120.00%
Vinay K. Nallamothu97.83%120.00%
Total115100.00%5100.00%


void __exit nr_loopback_clear(void) { del_timer_sync(&loopback_timer); skb_queue_purge(&loopback_queue); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1890.00%250.00%
Linus Torvalds15.00%125.00%
Vinay K. Nallamothu15.00%125.00%
Total20100.00%4100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)24279.61%642.86%
Vinay K. Nallamothu3611.84%17.14%
Dave Jones113.62%17.14%
Arnaldo Carvalho de Melo61.97%214.29%
Ingo Molnar41.32%17.14%
Tejun Heo30.99%17.14%
Linus Torvalds10.33%17.14%
Ralf Bächle10.33%17.14%
Total304100.00%14100.00%
Directory: net/netrom
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.