cregit-Linux how code gets into the kernel

Release 4.15 net/rose/rose_dev.c

Directory: net/rose
/*
 * 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 (C) Jonathan Naylor G4KLX (g4klx@g4klx.demon.co.uk)
 */
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/sysctl.h>
#include <linux/string.h>
#include <linux/socket.h>
#include <linux/errno.h>
#include <linux/fcntl.h>
#include <linux/in.h>
#include <linux/if_ether.h>
#include <linux/slab.h>

#include <asm/io.h>

#include <linux/inet.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/if_arp.h>
#include <linux/skbuff.h>

#include <net/ip.h>
#include <net/arp.h>

#include <net/ax25.h>
#include <net/rose.h>


static int rose_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, const void *daddr, const void *saddr, unsigned int len) { unsigned char *buff = skb_push(skb, ROSE_MIN_LEN + 2); if (daddr) memcpy(buff + 7, daddr, dev->addr_len); *buff++ = ROSE_GFI | ROSE_Q_BIT; *buff++ = 0x00; *buff++ = ROSE_DATA; *buff++ = 0x7F; *buff++ = AX25_P_IP; if (daddr != NULL) return 37; return -37; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)9081.82%350.00%
Eric W. Biedermann1715.45%116.67%
Stephen Hemminger21.82%116.67%
Eric Dumazet10.91%116.67%
Total110100.00%6100.00%


static int rose_set_mac_address(struct net_device *dev, void *addr) { struct sockaddr *sa = addr; int err; if (!memcmp(dev->dev_addr, sa->sa_data, dev->addr_len)) return 0; if (dev->flags & IFF_UP) { err = rose_add_loopback_node((rose_address *)sa->sa_data); if (err) return err; rose_del_loopback_node((rose_address *)dev->dev_addr); } memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Ralf Bächle5148.57%120.00%
Linus Torvalds (pre-git)5148.57%360.00%
Daniel Borkmann32.86%120.00%
Total105100.00%5100.00%


static int rose_open(struct net_device *dev) { int err; err = rose_add_loopback_node((rose_address *)dev->dev_addr); if (err) return err; netif_start_queue(dev); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)2559.52%375.00%
Ralf Bächle1740.48%125.00%
Total42100.00%4100.00%


static int rose_close(struct net_device *dev) { netif_stop_queue(dev); rose_del_loopback_node((rose_address *)dev->dev_addr); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)30100.00%5100.00%
Total30100.00%5100.00%


static netdev_tx_t rose_xmit(struct sk_buff *skb, struct net_device *dev) { struct net_device_stats *stats = &dev->stats; unsigned int len = skb->len; if (!netif_running(dev)) { printk(KERN_ERR "ROSE: rose_xmit - called when iface is down\n"); return NETDEV_TX_BUSY; } if (!rose_route_frame(skb, NULL)) { dev_kfree_skb(skb); stats->tx_errors++; return NETDEV_TX_OK; } stats->tx_packets++; stats->tx_bytes += len; return NETDEV_TX_OK; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)5256.52%654.55%
Eric W. Biedermann3436.96%19.09%
Stephen Hemminger44.35%218.18%
Patrick McHardy22.17%218.18%
Total92100.00%11100.00%

static const struct header_ops rose_header_ops = { .create = rose_header, }; static const struct net_device_ops rose_netdev_ops = { .ndo_open = rose_open, .ndo_stop = rose_close, .ndo_start_xmit = rose_xmit, .ndo_set_mac_address = rose_set_mac_address, };
void rose_setup(struct net_device *dev) { dev->mtu = ROSE_MAX_PACKET_SIZE - 2; dev->netdev_ops = &rose_netdev_ops; dev->header_ops = &rose_header_ops; dev->hard_header_len = AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + ROSE_MIN_LEN; dev->addr_len = ROSE_ADDR_LEN; dev->type = ARPHRD_ROSE; /* New-style flags. */ dev->flags = IFF_NOARP; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)5285.25%342.86%
Stephen Hemminger813.11%342.86%
Ralf Bächle11.64%114.29%
Total61100.00%7100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)36966.61%1142.31%
Ralf Bächle7012.64%311.54%
Stephen Hemminger559.93%519.23%
Eric W. Biedermann519.21%27.69%
Daniel Borkmann30.54%13.85%
Tejun Heo30.54%13.85%
Patrick McHardy20.36%27.69%
Eric Dumazet10.18%13.85%
Total554100.00%26100.00%
Directory: net/rose
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.