aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/drivers/daemon_user.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/um/drivers/daemon_user.c')
-rw-r--r--arch/um/drivers/daemon_user.c81
1 files changed, 42 insertions, 39 deletions
diff --git a/arch/um/drivers/daemon_user.c b/arch/um/drivers/daemon_user.c
index 8d2008f06682..90983d480ac6 100644
--- a/arch/um/drivers/daemon_user.c
+++ b/arch/um/drivers/daemon_user.c
@@ -1,22 +1,23 @@
1/* 1/*
2 * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and 2 * Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
3 * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and
3 * James Leu (jleu@mindspring.net). 4 * James Leu (jleu@mindspring.net).
4 * Copyright (C) 2001 by various other people who didn't put their name here. 5 * Copyright (C) 2001 by various other people who didn't put their name here.
5 * Licensed under the GPL. 6 * Licensed under the GPL.
6 */ 7 */
7 8
8#include <errno.h>
9#include <unistd.h>
10#include <stdint.h> 9#include <stdint.h>
10#include <unistd.h>
11#include <errno.h>
12#include <sys/types.h>
11#include <sys/socket.h> 13#include <sys/socket.h>
12#include <sys/un.h>
13#include <sys/time.h> 14#include <sys/time.h>
14#include "net_user.h" 15#include <sys/un.h>
15#include "daemon.h" 16#include "daemon.h"
16#include "kern_util.h" 17#include "net_user.h"
17#include "user.h"
18#include "os.h" 18#include "os.h"
19#include "um_malloc.h" 19#include "um_malloc.h"
20#include "user.h"
20 21
21#define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER) 22#define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER)
22 23
@@ -36,8 +37,9 @@ static struct sockaddr_un *new_addr(void *name, int len)
36 struct sockaddr_un *sun; 37 struct sockaddr_un *sun;
37 38
38 sun = kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL); 39 sun = kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL);
39 if(sun == NULL){ 40 if (sun == NULL) {
40 printk("new_addr: allocation of sockaddr_un failed\n"); 41 printk(UM_KERN_ERR "new_addr: allocation of sockaddr_un "
42 "failed\n");
41 return NULL; 43 return NULL;
42 } 44 }
43 sun->sun_family = AF_UNIX; 45 sun->sun_family = AF_UNIX;
@@ -54,38 +56,39 @@ static int connect_to_switch(struct daemon_data *pri)
54 int fd, n, err; 56 int fd, n, err;
55 57
56 pri->control = socket(AF_UNIX, SOCK_STREAM, 0); 58 pri->control = socket(AF_UNIX, SOCK_STREAM, 0);
57 if(pri->control < 0){ 59 if (pri->control < 0) {
58 err = -errno; 60 err = -errno;
59 printk("daemon_open : control socket failed, errno = %d\n", 61 printk(UM_KERN_ERR "daemon_open : control socket failed, "
60 -err); 62 "errno = %d\n", -err);
61 return err; 63 return err;
62 } 64 }
63 65
64 if(connect(pri->control, (struct sockaddr *) ctl_addr, 66 if (connect(pri->control, (struct sockaddr *) ctl_addr,
65 sizeof(*ctl_addr)) < 0){ 67 sizeof(*ctl_addr)) < 0) {
66 err = -errno; 68 err = -errno;
67 printk("daemon_open : control connect failed, errno = %d\n", 69 printk(UM_KERN_ERR "daemon_open : control connect failed, "
68 -err); 70 "errno = %d\n", -err);
69 goto out; 71 goto out;
70 } 72 }
71 73
72 fd = socket(AF_UNIX, SOCK_DGRAM, 0); 74 fd = socket(AF_UNIX, SOCK_DGRAM, 0);
73 if(fd < 0){ 75 if (fd < 0) {
74 err = -errno; 76 err = -errno;
75 printk("daemon_open : data socket failed, errno = %d\n", 77 printk(UM_KERN_ERR "daemon_open : data socket failed, "
76 -err); 78 "errno = %d\n", -err);
77 goto out; 79 goto out;
78 } 80 }
79 if(bind(fd, (struct sockaddr *) local_addr, sizeof(*local_addr)) < 0){ 81 if (bind(fd, (struct sockaddr *) local_addr, sizeof(*local_addr)) < 0) {
80 err = -errno; 82 err = -errno;
81 printk("daemon_open : data bind failed, errno = %d\n", 83 printk(UM_KERN_ERR "daemon_open : data bind failed, "
82 -err); 84 "errno = %d\n", -err);
83 goto out_close; 85 goto out_close;
84 } 86 }
85 87
86 sun = kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL); 88 sun = kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL);
87 if(sun == NULL){ 89 if (sun == NULL) {
88 printk("new_addr: allocation of sockaddr_un failed\n"); 90 printk(UM_KERN_ERR "new_addr: allocation of sockaddr_un "
91 "failed\n");
89 err = -ENOMEM; 92 err = -ENOMEM;
90 goto out_close; 93 goto out_close;
91 } 94 }
@@ -94,18 +97,18 @@ static int connect_to_switch(struct daemon_data *pri)
94 req.version = SWITCH_VERSION; 97 req.version = SWITCH_VERSION;
95 req.type = REQ_NEW_CONTROL; 98 req.type = REQ_NEW_CONTROL;
96 req.sock = *local_addr; 99 req.sock = *local_addr;
97 n = os_write_file(pri->control, &req, sizeof(req)); 100 n = write(pri->control, &req, sizeof(req));
98 if(n != sizeof(req)){ 101 if (n != sizeof(req)) {
99 printk("daemon_open : control setup request failed, err = %d\n", 102 printk(UM_KERN_ERR "daemon_open : control setup request "
100 -n); 103 "failed, err = %d\n", -errno);
101 err = -ENOTCONN; 104 err = -ENOTCONN;
102 goto out_free; 105 goto out_free;
103 } 106 }
104 107
105 n = os_read_file(pri->control, sun, sizeof(*sun)); 108 n = read(pri->control, sun, sizeof(*sun));
106 if(n != sizeof(*sun)){ 109 if (n != sizeof(*sun)) {
107 printk("daemon_open : read of data socket failed, err = %d\n", 110 printk(UM_KERN_ERR "daemon_open : read of data socket failed, "
108 -n); 111 "err = %d\n", -errno);
109 err = -ENOTCONN; 112 err = -ENOTCONN;
110 goto out_free; 113 goto out_free;
111 } 114 }
@@ -116,9 +119,9 @@ static int connect_to_switch(struct daemon_data *pri)
116 out_free: 119 out_free:
117 kfree(sun); 120 kfree(sun);
118 out_close: 121 out_close:
119 os_close_file(fd); 122 close(fd);
120 out: 123 out:
121 os_close_file(pri->control); 124 close(pri->control);
122 return err; 125 return err;
123} 126}
124 127
@@ -132,8 +135,8 @@ static int daemon_user_init(void *data, void *dev)
132 int usecs; 135 int usecs;
133 } name; 136 } name;
134 137
135 if(!strcmp(pri->sock_type, "unix")) 138 if (!strcmp(pri->sock_type, "unix"))
136 pri->ctl_addr = new_addr(pri->ctl_sock, 139 pri->ctl_addr = new_addr(pri->ctl_sock,
137 strlen(pri->ctl_sock) + 1); 140 strlen(pri->ctl_sock) + 1);
138 name.zero = 0; 141 name.zero = 0;
139 name.pid = os_getpid(); 142 name.pid = os_getpid();
@@ -142,7 +145,7 @@ static int daemon_user_init(void *data, void *dev)
142 pri->local_addr = new_addr(&name, sizeof(name)); 145 pri->local_addr = new_addr(&name, sizeof(name));
143 pri->dev = dev; 146 pri->dev = dev;
144 pri->fd = connect_to_switch(pri); 147 pri->fd = connect_to_switch(pri);
145 if(pri->fd < 0){ 148 if (pri->fd < 0) {
146 kfree(pri->local_addr); 149 kfree(pri->local_addr);
147 pri->local_addr = NULL; 150 pri->local_addr = NULL;
148 return pri->fd; 151 return pri->fd;
@@ -161,9 +164,9 @@ static void daemon_remove(void *data)
161{ 164{
162 struct daemon_data *pri = data; 165 struct daemon_data *pri = data;
163 166
164 os_close_file(pri->fd); 167 close(pri->fd);
165 pri->fd = -1; 168 pri->fd = -1;
166 os_close_file(pri->control); 169 close(pri->control);
167 pri->control = -1; 170 pri->control = -1;
168 171
169 kfree(pri->data_addr); 172 kfree(pri->data_addr);