From: Mooneer S. <mo...@ea...> - 2000-12-06 04:43:14
|
This modification consists of patches to both the user mode network utilities and the kernel itself. The kernel patch assumes you've applied the UML patch already. Kernel patch: diff -ur linux.orig/arch/um/drivers/eth_kern.c linux/arch/um/drivers/eth_kern.c --- linux.orig/arch/um/drivers/eth_kern.c Wed Dec 6 02:34:32 2000 +++ linux/arch/um/drivers/eth_kern.c Tue Dec 5 19:08:07 2000 @@ -10,6 +10,7 @@ #include <linux/skbuff.h> #include <linux/spinlock.h> #include <linux/in.h> +#include <linux/un.h> #include "user_util.h" #include "eth_net.h" @@ -51,8 +52,8 @@ { struct net_device *dev = NULL; struct uml_net_private *lp; - struct sockaddr_in *sin; - char *priv; + struct sockaddr_un *sin; + char *priv, tmp[55]; int i; for (i = 0; i < 4; i++) { @@ -85,11 +86,16 @@ 15) & ~15); memset(lp, 0, sizeof(struct uml_net_private)); - sin = (struct sockaddr_in *)&lp->addr; + sin = (struct sockaddr_un *)&lp->addr; - sin->sin_family = AF_INET; +/* sin->sin_family = AF_INET; sin->sin_port = htons(UML_NET_PORT); sin->sin_addr.s_addr = htonl(INADDR_LOOPBACK); +*/ + sin->sun_family = AF_UNIX; + strcpy(sin->sun_path, "/tmp/tap"); + sprintf(tmp, "%d", i); + strcat(sin->sun_path, tmp); dev->priv = lp; dev->open = uml_net_open; diff -ur linux.orig/arch/um/drivers/eth_user.c linux/arch/um/drivers/eth_user.c --- linux.orig/arch/um/drivers/eth_user.c Wed Dec 6 02:34:32 2000 +++ linux/arch/um/drivers/eth_user.c Tue Dec 5 19:12:18 2000 @@ -41,7 +41,7 @@ int new_fd; int ret; - if ((new_fd = socket(PF_INET, SOCK_STREAM, 0)) < 0) + if ((new_fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) return -ENOMEM; if (connect(new_fd,(struct sockaddr*)sin, User mode network utils: diff -ur um.orig/um_eth_net_util.c um/um_eth_net_util.c --- um.orig/um_eth_net_util.c Mon Jul 24 17:42:47 2000 +++ um/um_eth_net_util.c Tue Dec 5 18:59:43 2000 @@ -8,6 +8,7 @@ #include <fcntl.h> #include <sys/ioctl.h> +#include <sys/un.h> #include <net/if.h> #include <net/if_arp.h> #include <linux/if_packet.h> @@ -35,7 +36,7 @@ FD_SET(y,&perm); struct connection_data* uml_connection[1024]; -int debug = 1; +int debug = 0; void dump_packet(unsigned char *buffer,int size,int term) { int i; @@ -54,7 +55,7 @@ unsigned char *buffer = hbuf + UM_ETH_NET_HDR_SIZE; struct connection_data *conn_in; struct sockaddr addr; - struct sockaddr_in *sin; + struct sockaddr_un *sin; fd_set perm,temp; int type; int high_fd = 0; @@ -70,12 +71,16 @@ memset(&addr,0,sizeof(struct sockaddr)); FD_ZERO(&perm); - sin = (struct sockaddr_in*)&addr; - sin->sin_family = AF_INET; + sin = (struct sockaddr_un*)&addr; +/* sin->sin_family = AF_INET; sin->sin_port = htons(UM_ETH_NET_PORT); sin->sin_addr.s_addr = htonl(INADDR_ANY); +*/ - if((new_fd = socket(PF_INET,SOCK_STREAM,0))<= 0) { + sin->sun_family = AF_UNIX; + sprintf(sin->sun_path, "/tmp/%s", argv[1]); + + if((new_fd = socket(PF_UNIX,SOCK_STREAM,0))<= 0) { perror("socket"); exit(errno); } -----Original Message----- From: Jeff Dike [mailto:jd...@ka...] Sent: Tuesday, December 05, 2000 9:27 PM To: Mooneer Salem Cc: Rodrigo Barbosa (aka morcego); use...@li... Subject: Re: [uml-devel] RE: [uml-user] [PATCH net-tools] debug improvements mo...@ea... said: > TCP Unix Difference > ----------------------------- > Min| 0.8 0.3 0.5 > Max| 29.1 0.3 28.8 > Avg| 110.0 1.8 108.2 > Pak| 6% 0% 0% > ----------------------------- Nice. You sold me. Is your patch ready for public viewing? I'd like to reproduce these results here. Jeff |