2 * Copyright (C) 2007 Luca Bigliardi (shammash@artha.org).
3 * Licensed under the GPL.
8 #include <libvdeplug.h>
9 #include "kern_constants.h"
11 #include "um_malloc.h"
15 #define MAX_PACKET (ETH_MAX_PACKET + ETH_HEADER_OTHER)
17 static int vde_user_init(void *data
, void *dev
)
19 struct vde_data
*pri
= data
;
25 conn
= vde_open(pri
->vde_switch
, pri
->descr
, pri
->args
);
29 printk(UM_KERN_ERR
"vde_user_init: vde_open failed, "
30 "errno = %d\n", errno
);
34 printk(UM_KERN_INFO
"vde backend - connection opened\n");
41 static int vde_user_open(void *data
)
43 struct vde_data
*pri
= data
;
45 if (pri
->conn
!= NULL
)
46 return vde_datafd(pri
->conn
);
48 printk(UM_KERN_WARNING
"vde_open - we have no VDECONN to open");
52 static void vde_remove(void *data
)
54 struct vde_data
*pri
= data
;
56 if (pri
->conn
!= NULL
) {
57 printk(UM_KERN_INFO
"vde backend - closing connection\n");
65 printk(UM_KERN_WARNING
"vde_remove - we have no VDECONN to remove");
68 static int vde_set_mtu(int mtu
, void *data
)
73 const struct net_user_info vde_user_info
= {
74 .init
= vde_user_init
,
75 .open
= vde_user_open
,
78 .set_mtu
= vde_set_mtu
,
80 .delete_address
= NULL
,
81 .max_packet
= MAX_PACKET
- ETH_HEADER_OTHER
84 void vde_init_libstuff(struct vde_data
*vpri
, struct vde_init
*init
)
86 struct vde_open_args
*args
;
88 vpri
->args
= kmalloc(sizeof(struct vde_open_args
), UM_GFP_KERNEL
);
89 if (vpri
->args
== NULL
) {
90 printk(UM_KERN_ERR
"vde_init_libstuff - vde_open_args"
97 args
->port
= init
->port
;
98 args
->group
= init
->group
;
99 args
->mode
= init
->mode
? init
->mode
: 0700;
101 args
->port
? printk(UM_KERN_INFO
"port %d", args
->port
) :
102 printk(UM_KERN_INFO
"undefined port");
105 int vde_user_read(void *conn
, void *buf
, int len
)
107 VDECONN
*vconn
= conn
;
113 rv
= vde_recv(vconn
, buf
, len
, 0);
125 int vde_user_write(void *conn
, void *buf
, int len
)
127 VDECONN
*vconn
= conn
;
132 return vde_send(vconn
, buf
, len
, 0);