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.15-rc2 109 lines 2.6 kB view raw
1#include "linux/config.h" 2#include "linux/kernel.h" 3#include "linux/stddef.h" 4#include "linux/init.h" 5#include "linux/netdevice.h" 6#include "linux/if_arp.h" 7#include "net_kern.h" 8#include "net_user.h" 9#include "kern.h" 10#include "slip.h" 11 12struct slip_init { 13 char *gate_addr; 14}; 15 16void 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 *spri = ((struct slip_data) 25 { .name = { '\0' }, 26 .addr = NULL, 27 .gate_addr = init->gate_addr, 28 .slave = -1, 29 .slip = SLIP_PROTO_INIT, 30 .dev = dev }); 31 32 dev->init = NULL; 33 dev->header_cache_update = NULL; 34 dev->hard_header_cache = NULL; 35 dev->hard_header = NULL; 36 dev->hard_header_len = 0; 37 dev->addr_len = 0; 38 dev->type = ARPHRD_SLIP; 39 dev->tx_queue_len = 256; 40 dev->flags = IFF_NOARP; 41 printk("SLIP backend - SLIP IP = %s\n", spri->gate_addr); 42} 43 44static unsigned short slip_protocol(struct sk_buff *skbuff) 45{ 46 return(htons(ETH_P_IP)); 47} 48 49static int slip_read(int fd, struct sk_buff **skb, 50 struct uml_net_private *lp) 51{ 52 return(slip_user_read(fd, (*skb)->mac.raw, (*skb)->dev->mtu, 53 (struct slip_data *) &lp->user)); 54} 55 56static int slip_write(int fd, struct sk_buff **skb, 57 struct uml_net_private *lp) 58{ 59 return(slip_user_write(fd, (*skb)->data, (*skb)->len, 60 (struct slip_data *) &lp->user)); 61} 62 63struct net_kern_info slip_kern_info = { 64 .init = slip_init, 65 .protocol = slip_protocol, 66 .read = slip_read, 67 .write = slip_write, 68}; 69 70static int slip_setup(char *str, char **mac_out, void *data) 71{ 72 struct slip_init *init = data; 73 74 *init = ((struct slip_init) 75 { .gate_addr = NULL }); 76 77 if(str[0] != '\0') 78 init->gate_addr = str; 79 return(1); 80} 81 82static struct transport slip_transport = { 83 .list = LIST_HEAD_INIT(slip_transport.list), 84 .name = "slip", 85 .setup = slip_setup, 86 .user = &slip_user_info, 87 .kern = &slip_kern_info, 88 .private_size = sizeof(struct slip_data), 89 .setup_size = sizeof(struct slip_init), 90}; 91 92static int register_slip(void) 93{ 94 register_transport(&slip_transport); 95 return(1); 96} 97 98__initcall(register_slip); 99 100/* 101 * Overrides for Emacs so that we follow Linus's tabbing style. 102 * Emacs will notice this stuff at the end of the file and automatically 103 * adjust the settings for this buffer only. This must remain at the end 104 * of the file. 105 * --------------------------------------------------------------------------- 106 * Local variables: 107 * c-file-style: "linux" 108 * End: 109 */