Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.26-rc1 94 lines 2.1 kB view raw
1/* 2 * Copyright (C) 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 3 * Licensed under the GPL. 4 */ 5 6#include <linux/if_arp.h> 7#include <linux/init.h> 8#include <linux/netdevice.h> 9#include "net_kern.h" 10#include "slip.h" 11 12struct slip_init { 13 char *gate_addr; 14}; 15 16static void slip_init(struct net_device *dev, void *data) 17{ 18 struct uml_net_private *private; 19 struct slip_data *spri; 20 struct slip_init *init = data; 21 22 private = dev->priv; 23 spri = (struct slip_data *) private->user; 24 25 memset(spri->name, 0, sizeof(spri->name)); 26 spri->addr = NULL; 27 spri->gate_addr = init->gate_addr; 28 spri->slave = -1; 29 spri->dev = dev; 30 31 slip_proto_init(&spri->slip); 32 33 dev->init = NULL; 34 dev->hard_header_len = 0; 35 dev->header_ops = NULL; 36 dev->addr_len = 0; 37 dev->type = ARPHRD_SLIP; 38 dev->tx_queue_len = 256; 39 dev->flags = IFF_NOARP; 40 printk("SLIP backend - SLIP IP = %s\n", spri->gate_addr); 41} 42 43static unsigned short slip_protocol(struct sk_buff *skbuff) 44{ 45 return htons(ETH_P_IP); 46} 47 48static int slip_read(int fd, struct sk_buff *skb, struct uml_net_private *lp) 49{ 50 return slip_user_read(fd, skb_mac_header(skb), skb->dev->mtu, 51 (struct slip_data *) &lp->user); 52} 53 54static int slip_write(int fd, struct sk_buff *skb, struct uml_net_private *lp) 55{ 56 return slip_user_write(fd, skb->data, skb->len, 57 (struct slip_data *) &lp->user); 58} 59 60static const struct net_kern_info slip_kern_info = { 61 .init = slip_init, 62 .protocol = slip_protocol, 63 .read = slip_read, 64 .write = slip_write, 65}; 66 67static int slip_setup(char *str, char **mac_out, void *data) 68{ 69 struct slip_init *init = data; 70 71 *init = ((struct slip_init) { .gate_addr = NULL }); 72 73 if (str[0] != '\0') 74 init->gate_addr = str; 75 return 1; 76} 77 78static struct transport slip_transport = { 79 .list = LIST_HEAD_INIT(slip_transport.list), 80 .name = "slip", 81 .setup = slip_setup, 82 .user = &slip_user_info, 83 .kern = &slip_kern_info, 84 .private_size = sizeof(struct slip_data), 85 .setup_size = sizeof(struct slip_init), 86}; 87 88static int register_slip(void) 89{ 90 register_transport(&slip_transport); 91 return 0; 92} 93 94late_initcall(register_slip);