Skip to contentSkip to conversation

vde network backend

RFC PATCH In review Luca Bigliardi 3 participants 7 messages Jul 25, 2007 – Aug 16, 2007 User-mode Linux (UML)

lore
Share & tools
lore
#0 lore raw

RFC PATCH 1/1 vde network backend

Hi,
I've written a new network backend for user-mode-linux using libvdeplug to connect to a vde_switch. In the following lines I've made a little description of what VDE is and I've written a couple of examples to give you an idea of the benefits you can have using this backend.

Please tell me what do you think about vde-transport and its first implementation I'm attaching in this mail (It's a patch developed on 2.6.22.1 vanilla).

Transport syntax:
ethN=vde,<vde_switch>,<mac addr>,<port>,<group>,<mode>,<description>

Simplest example (attach to default switch on first port available):
eth0=vde

Virtual Distributed Ethernet is a virtual network that can be spawned over a set of physical computer over the Internet and that can be shared between physical hosts and various kinds of virtual machines. vde_switch, core app of VDE framework, is an evolution of uml_switch. The project was originally written by Renzo Davoli and now is maintained and developed by Virtualsquare Team (which I'm part of).
For more information and simple examples of vde usage visit:
http://wiki.virtualsquare.org/index.php/VDE and
http://wiki.virtualsquare.org/index.php/VDE_Basic_Networking

Right now you can already connect to vde_switch with user-mode-linux in a dirty way using daemon backend ( eth0=daemon,,,/tmp/switch1/ctl ), but with vde network backend you can take advantage of greater flexibility and transparency provided by libvdeplug.
For example you can connect to a specific switch port that can be already configured with 802.1Q, you can provide a description for uml instance to be able to better distinguish the port in complex configurations and you can specify data socket permissions.

Regards,

Luca

Signature · 4 lines
Beware of programmers who carry screwdrivers.
                        -- Leonard Brandwein

http://shammash.homelinux.org/ - http://www.artha.org/ - http://www.yue.it/
arch/um/Kconfig.net +22 -0
diff -Naurp linux_ORIG/arch/um/Kconfig.net linux/arch/um/Kconfig.net
@@ -108,6 +108,28 @@ config UML_NET_DAEMON
         more than one without conflict.  If you don't need UML networking,
         say N.
 
+config UML_NET_VDE
+	bool "VDE transport"
+	depends on UML_NET
+	help
+	This User-Mode Linux network transport allows one or more running
+	UMLs on a single host to communicate with each other and also
+	with the rest of the world using Virtual Distributed Ethernet,
+	an improved fork of uml_switch.
+
+	You must have libvdeplug installed in order to build the vde
+	transport into UML.
+
+	To use this form of networking, you will need to run vde_switch
+	on the host.
+
+	For more information, see <http://wiki.virtualsquare.org/>
+	That site has a good overview of what VDE is and also examples
+	of the UML command line to use to enable VDE networking.
+
+	If you need UML networking with VDE,
+	say Y.
+
 config UML_NET_MCAST
 	bool "Multicast transport"
 	depends on UML_NET
arch/um/drivers/Makefile +8 -2
diff -Naurp linux_ORIG/arch/um/drivers/Makefile linux/arch/um/drivers/Makefile
@@ -18,11 +18,16 @@ port-objs := port_kern.o port_user.o
 harddog-objs := harddog_kern.o harddog_user.o
 
 LDFLAGS_pcap.o := -r $(shell $(CC) $(CFLAGS) -print-file-name=libpcap.a)
+LDFLAGS_vde.o := -r $(shell $(CC) $(CFLAGS) -print-file-name=libvdeplug.a)
 
-targets := pcap_kern.o pcap_user.o
+targets := pcap_kern.o pcap_user.o vde_kern.o vde_user.o
 
 $(obj)/pcap.o: $(obj)/pcap_kern.o $(obj)/pcap_user.o
 	$(LD) -r -dp -o $@ $^ $(LDFLAGS) $(LDFLAGS_pcap.o)
+
+$(obj)/vde.o: $(obj)/vde_kern.o $(obj)/vde_user.o
+	$(LD) -r -dp -o $@ $^ $(LDFLAGS) $(LDFLAGS_vde.o)
+
 #XXX: The call below does not work because the flags are added before the
 # object name, so nothing from the library gets linked.
 #$(call if_changed,ld)
@@ -37,6 +42,7 @@ obj-$(CONFIG_STDERR_CONSOLE) += stderr_c
 obj-$(CONFIG_UML_NET_SLIP) += slip.o slip_common.o
 obj-$(CONFIG_UML_NET_SLIRP) += slirp.o slip_common.o
 obj-$(CONFIG_UML_NET_DAEMON) += daemon.o 
+obj-$(CONFIG_UML_NET_VDE) += vde.o 
 obj-$(CONFIG_UML_NET_MCAST) += mcast.o 
 obj-$(CONFIG_UML_NET_PCAP) += pcap.o
 obj-$(CONFIG_UML_NET) += net.o 
@@ -54,6 +60,6 @@ obj-$(CONFIG_BLK_DEV_COW_COMMON) += cow_
 obj-$(CONFIG_UML_RANDOM) += random.o
 
 # pcap_user.o must be added explicitly.
-USER_OBJS := fd.o null.o pty.o tty.o xterm.o slip_common.o pcap_user.o
+USER_OBJS := fd.o null.o pty.o tty.o xterm.o slip_common.o pcap_user.o vde_user.o
 
 include arch/um/scripts/Makefile.rules
arch/um/drivers/vde.h +27 -0
diff -Naurp linux_ORIG/arch/um/drivers/vde.h linux/arch/um/drivers/vde.h
@@ -0,0 +1,27 @@
+/* 
+ * Copyright (C) 2007 Luca Bigliardi ([email protected]).
+ * Licensed under the GPL.
+ */
+
+struct vde_data {
+	char *vde_switch;
+	char *descr;
+	void *args;
+	void *conn;
+	void *dev;
+};
+
+struct vde_init {
+	char *vde_switch;
+	char *descr;
+	int port;
+	char *group;
+	int mode;
+};
+
+extern const struct net_user_info vde_user_info;
+
+extern void vde_init_libstuff(struct vde_data *vpri, struct vde_init *init);
+
+extern int vde_user_read(void *conn, void *buf, int len);
+extern int vde_user_write(void *conn, void *buf, int len);
arch/um/drivers/vde_kern.c +138 -0

138 lines not on this page · raw message

arch/um/drivers/vde_user.c +129 -0

129 lines not on this page · raw message

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/

_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

#1 lore raw
Quoted 9 lines · Luca Bigliardi

Hi,
I've written a new network backend for user-mode-linux using libvdeplug to connect to a vde_switch. In the following lines I've made a little description of what VDE is and I've written a couple of examples to give you an idea of the benefits you can have using this backend.

Please tell me what do you think about vde-transport and its first implementation I'm attaching in this mail (It's a patch developed on 2.6.22.1 vanilla).

Looks reasonable (and useful). Do you want me to drop it in my tree and forward it to mainline? If so, I'll need a changelog and a Signed-off-by:.

Some comments -
style violations :
there are some cases of return(x) which should be
return x

		if( blah ){ should be if(blah) {
		if(foo) return bar - the return should be on the next

line
the indentation of multi-line function calls is whacked

I would leave out the likely()s. Unless you can show a
noticable performance difference, they only clutter the code.
printks should have severity specified (in userspace code,
they are available as UM_KERN_*)
um_kmalloc is gone - use kmalloc with UM_GFP_KERNEL

I realize that you probably copied many of the above problems from the existing code. All I can say is that I'm gradually fixing them, and I'd rather not add new instances.

Jeff

Signature · 11 lines
Work email - jdike at linux dot intel dot com

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
#2 lore raw
Quoted 2 lines · Jeff Dike

Looks reasonable (and useful). Do you want me to drop it in my tree and forward it to mainline?

Yes please, that would be great.

Quoted 1 line

If so, I'll need a changelog and a Signed-off-by:.

Here they are. I hope changelog is clear enought. Please tell me if you want a properly formatted e-mail to submit to mainline.

Added vde network backend in uml to introduce native Virtual Distributed Ethernet support (using libvdeplug).

Quoted 6 lines

Some comments -
style violations :
there are some cases of return(x) which should be
return x

		if( blah ){ should be if(blah) {
		if(foo) return bar - the return should be on the next
Quoted 8 lines

line
the indentation of multi-line function calls is whacked

I would leave out the likely()s. Unless you can show a
noticable performance difference, they only clutter the code.
printks should have severity specified (in userspace code,
they are available as UM_KERN_*)
um_kmalloc is gone - use kmalloc with UM_GFP_KERNEL

Thank you. I'm attaching a new patch with some corrections tested on a 2.6.23-rc1-git1. I especially hope indentation of multi-line function calls is getting better (I'm trusting vim's "gq", please tell me how's going).

Quoted 3 lines

I realize that you probably copied many of the above problems from the existing code. All I can say is that I'm gradually fixing them, and I'd rather not add new instances.

Yes, in fact i was getting "deeply inspired" :) by some existing parts without paying enought attention to syntax.

luca

Signature · 4 lines
Beware of programmers who carry screwdrivers.
                        -- Leonard Brandwein

http://shammash.homelinux.org/ - http://www.artha.org/ - http://www.yue.it/
arch/um/Kconfig.net +22 -0
@@ -108,6 +108,28 @@ config UML_NET_DAEMON
         more than one without conflict.  If you don't need UML networking,
         say N.
 
+config UML_NET_VDE
+	bool "VDE transport"
+	depends on UML_NET
+	help
+	This User-Mode Linux network transport allows one or more running
+	UMLs on a single host to communicate with each other and also
+	with the rest of the world using Virtual Distributed Ethernet,
+	an improved fork of uml_switch.
+
+	You must have libvdeplug installed in order to build the vde
+	transport into UML.
+
+	To use this form of networking, you will need to run vde_switch
+	on the host.
+
+	For more information, see <http://wiki.virtualsquare.org/>
+	That site has a good overview of what VDE is and also examples
+	of the UML command line to use to enable VDE networking.
+
+	If you need UML networking with VDE,
+	say Y.
+
 config UML_NET_MCAST
 	bool "Multicast transport"
 	depends on UML_NET
arch/um/drivers/Makefile +8 -2
@@ -18,11 +18,16 @@ port-objs := port_kern.o port_user.o
 harddog-objs := harddog_kern.o harddog_user.o
 
 LDFLAGS_pcap.o := -r $(shell $(CC) $(CFLAGS) -print-file-name=libpcap.a)
+LDFLAGS_vde.o := -r $(shell $(CC) $(CFLAGS) -print-file-name=libvdeplug.a)
 
-targets := pcap_kern.o pcap_user.o
+targets := pcap_kern.o pcap_user.o vde_kern.o vde_user.o
 
 $(obj)/pcap.o: $(obj)/pcap_kern.o $(obj)/pcap_user.o
 	$(LD) -r -dp -o $@ $^ $(LDFLAGS) $(LDFLAGS_pcap.o)
+
+$(obj)/vde.o: $(obj)/vde_kern.o $(obj)/vde_user.o
+	$(LD) -r -dp -o $@ $^ $(LDFLAGS) $(LDFLAGS_vde.o)
+
 #XXX: The call below does not work because the flags are added before the
 # object name, so nothing from the library gets linked.
 #$(call if_changed,ld)
@@ -37,6 +42,7 @@ obj-$(CONFIG_STDERR_CONSOLE) += stderr_c
 obj-$(CONFIG_UML_NET_SLIP) += slip.o slip_common.o
 obj-$(CONFIG_UML_NET_SLIRP) += slirp.o slip_common.o
 obj-$(CONFIG_UML_NET_DAEMON) += daemon.o 
+obj-$(CONFIG_UML_NET_VDE) += vde.o 
 obj-$(CONFIG_UML_NET_MCAST) += mcast.o 
 obj-$(CONFIG_UML_NET_PCAP) += pcap.o
 obj-$(CONFIG_UML_NET) += net.o 
@@ -54,6 +60,6 @@ obj-$(CONFIG_BLK_DEV_COW_COMMON) += cow_
 obj-$(CONFIG_UML_RANDOM) += random.o
 
 # pcap_user.o must be added explicitly.
-USER_OBJS := fd.o null.o pty.o tty.o xterm.o slip_common.o pcap_user.o
+USER_OBJS := fd.o null.o pty.o tty.o xterm.o slip_common.o pcap_user.o vde_user.o
 
 include arch/um/scripts/Makefile.rules
arch/um/drivers/vde.h +27 -0
@@ -0,0 +1,27 @@
+/* 
+ * Copyright (C) 2007 Luca Bigliardi ([email protected]).
+ * Licensed under the GPL.
+ */
+
+struct vde_data {
+	char *vde_switch;
+	char *descr;
+	void *args;
+	void *conn;
+	void *dev;
+};
+
+struct vde_init {
+	char *vde_switch;
+	char *descr;
+	int port;
+	char *group;
+	int mode;
+};
+
+extern const struct net_user_info vde_user_info;
+
+extern void vde_init_libstuff(struct vde_data *vpri, struct vde_init *init);
+
+extern int vde_user_read(void *conn, void *buf, int len);
+extern int vde_user_write(void *conn, void *buf, int len);
arch/um/drivers/vde_kern.c +136 -0

136 lines not on this page · raw message

arch/um/drivers/vde_user.c +136 -0

136 lines not on this page · raw message

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/

_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

#3 lore raw
In reply to Jeff Dike
Quoted 3 lines · Jeff Dike
	style violations :

		if( blah ){ should be if(blah) {

Hmm - I know I'm a bit too late, but that should be "if (blah) {", with a space after if (or after for, or after while (blah) { ).

Bye

Signature · 4 lines
"Doh!" (cit.), I've made another another mistake!
Paolo Giarrusso, aka Blaisorblade
Linux registered user n. 292729
http://www.user-mode-linux.org/~blaisorblade

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/

_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

#4 lore raw
Quoted 2 lines · Blaisorblade

Hmm - I know I'm a bit too late, but that should be "if (blah) {", with a space after if (or after for, or after while (blah) { ).

Thank you, I'm attaching a new patch with proper changes.

luca

Signature · 4 lines
Beware of programmers who carry screwdrivers.
                        -- Leonard Brandwein

http://shammash.homelinux.org/ - http://www.artha.org/ - http://www.yue.it/
arch/um/Kconfig.net +22 -0
@@ -108,6 +108,28 @@ config UML_NET_DAEMON
         more than one without conflict.  If you don't need UML networking,
         say N.
 
+config UML_NET_VDE
+	bool "VDE transport"
+	depends on UML_NET
+	help
+	This User-Mode Linux network transport allows one or more running
+	UMLs on a single host to communicate with each other and also
+	with the rest of the world using Virtual Distributed Ethernet,
+	an improved fork of uml_switch.
+
+	You must have libvdeplug installed in order to build the vde
+	transport into UML.
+
+	To use this form of networking, you will need to run vde_switch
+	on the host.
+
+	For more information, see <http://wiki.virtualsquare.org/>
+	That site has a good overview of what VDE is and also examples
+	of the UML command line to use to enable VDE networking.
+
+	If you need UML networking with VDE,
+	say Y.
+
 config UML_NET_MCAST
 	bool "Multicast transport"
 	depends on UML_NET
arch/um/drivers/Makefile +8 -2
@@ -18,11 +18,16 @@ port-objs := port_kern.o port_user.o
 harddog-objs := harddog_kern.o harddog_user.o
 
 LDFLAGS_pcap.o := -r $(shell $(CC) $(CFLAGS) -print-file-name=libpcap.a)
+LDFLAGS_vde.o := -r $(shell $(CC) $(CFLAGS) -print-file-name=libvdeplug.a)
 
-targets := pcap_kern.o pcap_user.o
+targets := pcap_kern.o pcap_user.o vde_kern.o vde_user.o
 
 $(obj)/pcap.o: $(obj)/pcap_kern.o $(obj)/pcap_user.o
 	$(LD) -r -dp -o $@ $^ $(LDFLAGS) $(LDFLAGS_pcap.o)
+
+$(obj)/vde.o: $(obj)/vde_kern.o $(obj)/vde_user.o
+	$(LD) -r -dp -o $@ $^ $(LDFLAGS) $(LDFLAGS_vde.o)
+
 #XXX: The call below does not work because the flags are added before the
 # object name, so nothing from the library gets linked.
 #$(call if_changed,ld)
@@ -37,6 +42,7 @@ obj-$(CONFIG_STDERR_CONSOLE) += stderr_c
 obj-$(CONFIG_UML_NET_SLIP) += slip.o slip_common.o
 obj-$(CONFIG_UML_NET_SLIRP) += slirp.o slip_common.o
 obj-$(CONFIG_UML_NET_DAEMON) += daemon.o 
+obj-$(CONFIG_UML_NET_VDE) += vde.o 
 obj-$(CONFIG_UML_NET_MCAST) += mcast.o 
 obj-$(CONFIG_UML_NET_PCAP) += pcap.o
 obj-$(CONFIG_UML_NET) += net.o 
@@ -54,6 +60,6 @@ obj-$(CONFIG_BLK_DEV_COW_COMMON) += cow_
 obj-$(CONFIG_UML_RANDOM) += random.o
 
 # pcap_user.o must be added explicitly.
-USER_OBJS := fd.o null.o pty.o tty.o xterm.o slip_common.o pcap_user.o
+USER_OBJS := fd.o null.o pty.o tty.o xterm.o slip_common.o pcap_user.o vde_user.o
 
 include arch/um/scripts/Makefile.rules
arch/um/drivers/vde.h +27 -0
@@ -0,0 +1,27 @@
+/* 
+ * Copyright (C) 2007 Luca Bigliardi ([email protected]).
+ * Licensed under the GPL.
+ */
+
+struct vde_data {
+	char *vde_switch;
+	char *descr;
+	void *args;
+	void *conn;
+	void *dev;
+};
+
+struct vde_init {
+	char *vde_switch;
+	char *descr;
+	int port;
+	char *group;
+	int mode;
+};
+
+extern const struct net_user_info vde_user_info;
+
+extern void vde_init_libstuff(struct vde_data *vpri, struct vde_init *init);
+
+extern int vde_user_read(void *conn, void *buf, int len);
+extern int vde_user_write(void *conn, void *buf, int len);
arch/um/drivers/vde_kern.c +136 -0

136 lines not on this page · raw message

arch/um/drivers/vde_user.c +136 -0

136 lines not on this page · raw message

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/

_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

#5 lore raw
Quoted 1 line · Luca Bigliardi

Thank you, I'm attaching a new patch with proper changes.

What did you change? BB was right to comment on my changelog, but I don't see any examples of if( blah ) { anywhere in the vde code.

Since the main patch is in -mm, if you have changes, send incremental patches, not updated full patches.

Jeff

Signature · 11 lines
Work email - jdike at linux dot intel dot com

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
#6 lore raw
Quoted 2 lines · Jeff Dike

What did you change? BB was right to comment on my changelog, but I don't see any examples of if( blah ) { anywhere in the vde code.

I've changed "if(blah)" into "if (blah)".

Quoted 2 lines

Since the main patch is in -mm, if you have changes, send incremental patches, not updated full patches.

I'm sorry. I'm attaching the diff between the -mm patch and the newer one.

luca

Signature · 4 lines
Beware of programmers who carry screwdrivers.
                        -- Leonard Brandwein

http://shammash.homelinux.org/ - http://www.artha.org/ - http://www.yue.it/
uml_vdetransport-03.patch renamed from uml_vdetransport-02.patch +17 -17
@@ -142,9 +142,9 @@
 +{
 +	struct vde_data *pri = (struct vde_data *) &lp->user;
 +
-+	if(pri->conn != NULL) {
++	if (pri->conn != NULL) {
 +		*skb = ether_adjust_skb(*skb, ETH_HEADER_OTHER);
-+		if(*skb == NULL)
++		if (*skb == NULL)
 +			return -ENOMEM;
 +
 +		return vde_user_read(pri->conn, skb_mac_header(*skb),
@@ -159,7 +159,7 @@
 +{
 +	struct vde_data *pri = (struct vde_data *) &lp->user;
 +
-+	if(pri->conn != NULL)
++	if (pri->conn != NULL)
 +		return vde_user_write((void *)pri->conn, (*skb)->data,
 +					(*skb)->len);
 +
@@ -189,22 +189,22 @@
 +	remain = split_if_spec(str, &init->vde_switch, mac_out, &port_str,
 +				&init->group, &mode_str, &init->descr, NULL);
 +
-+	if(remain != NULL)
++	if (remain != NULL)
 +		printk(KERN_WARNING "vde_setup - Ignoring extra data :"
 +					"'%s'\n", remain);
 +
-+	if(port_str != NULL) {
++	if (port_str != NULL) {
 +		init->port = simple_strtoul(port_str, &last, 10);
-+		if((*last != '\0') || (last == port_str)) {
++		if ((*last != '\0') || (last == port_str)) {
 +			printk(KERN_ERR "vde_setup - Bad port : '%s'\n",
 +						port_str);
 +			return 0;
 +		}
 +	}
 +	
-+	if(mode_str != NULL) {
++	if (mode_str != NULL) {
 +		init->mode = simple_strtoul(mode_str, &last, 8);
-+		if((*last != '\0') || (last == mode_str)) {
++		if ((*last != '\0') || (last == mode_str)) {
 +			printk(KERN_ERR "vde_setup - Bad mode : '%s'\n",
 +						mode_str);
 +			return 0;
@@ -265,7 +265,7 @@
 +
 +	conn = vde_open(pri->vde_switch, pri->descr, pri->args);
 +	
-+	if(conn == NULL) {
++	if (conn == NULL) {
 +		err = -errno;
 +		printk(UM_KERN_ERR "vde_user_init: vde_open failed, "
 +					"errno = %d\n", errno);
@@ -283,7 +283,7 @@
 +{
 +	struct vde_data *pri = data;
 +
-+	if(pri->conn != NULL)
++	if (pri->conn != NULL)
 +		return vde_datafd(pri->conn);
 +	
 +	printk(UM_KERN_WARNING "vde_open - we have no VDECONN to open");
@@ -294,7 +294,7 @@
 +{
 +	struct vde_data *pri = data;
 +
-+	if(pri->conn != NULL) {
++	if (pri->conn != NULL) {
 +		printk(UM_KERN_INFO "vde backend - closing connection\n");
 +		vde_close(pri->conn);
 +		pri->conn = NULL;
@@ -327,7 +327,7 @@
 +	struct vde_open_args *args;
 +
 +	vpri->args = kmalloc(sizeof(struct vde_open_args), UM_GFP_KERNEL);
-+	if(vpri->args == NULL) {
++	if (vpri->args == NULL) {
 +		printk(UM_KERN_ERR "\nvde_init_libstuff - vde_open_args"
 +					"allocation failed");
 +		return;
@@ -348,16 +348,16 @@
 +	VDECONN *vconn = (VDECONN *) conn;
 +	int rv;
 +
-+	if(vconn == NULL)
++	if (vconn == NULL)
 +		return 0;
 +
 +	rv = vde_recv(vconn, buf, len, 0);
-+	if(rv < 0) {
-+		if(errno == EAGAIN)
++	if (rv < 0) {
++		if (errno == EAGAIN)
 +			return 0;
 +		return -errno;
 +	}
-+	else if(rv == 0)
++	else if (rv == 0)
 +		return -ENOTCONN;
 +
 +	return rv;
@@ -367,7 +367,7 @@
 +{
 +	VDECONN *vconn = (VDECONN *) conn;
 +
-+	if(vconn == NULL)
++	if (vconn == NULL)
 +		return 0;
 +
 +	return vde_send(vconn, buf, len, 0);

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/

_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel