From: Todd A. J. <no...@co...> - 2003-01-27 12:54:53
|
I'm trying to get a system to boot using DHCP. I'm booting with the following: uml mem=128M devfs=nomount \ ubd0=root_fs.cow,root_fs \ ubd1=emptyfs.swap.1024 \ eth0=tuntap,,,$(ifconfig eth0 | perl -ne 'print $1 if /addr:(\S+)/') but DHCP keeps setting the IP to the same as the host (which is fine, I think) and the netmask to 255.255.255.255 (which is not). It should be a 24-bit address. Where is tuntap picking up the erroneous netmask? -- "Of course I'm in shape! Round's a shape, isn't it?" |
From: Jan H. <bu...@uc...> - 2003-01-27 13:53:08
|
On Mon, Jan 27, 2003 at 04:54:43AM -0800, Todd A. Jacobs wrote: > I'm trying to get a system to boot using DHCP. I'm booting with the > following: > > uml mem=128M devfs=nomount \ > ubd0=root_fs.cow,root_fs \ > ubd1=emptyfs.swap.1024 \ > eth0=tuntap,,,$(ifconfig eth0 | perl -ne 'print $1 if /addr:(\S+)/') > > but DHCP keeps setting the IP to the same as the host (which is fine, I > think) and the netmask to 255.255.255.255 (which is not). It should be a > 24-bit address. Where is tuntap picking up the erroneous netmask? The netmask is NOT errorneout. It's a point-to-point (virtual) link. So it must not have 24-bit netmask. It gets 32-bit netmask because it does not make sense for that link anyway. By the way, linux does not mind having the interface address same as host, but it's not correct wrt TCP/IP! Because each interface should have it's own, unique, IP address! The network topology with uml looks like: +------+ +--------+ LAN | +----+ +----+ +----+ | | UML |eth0*<--->*tap0| HOST |eth0*--| | +----+ +----+ +----+ | +------+ +--------+ And the host acts like a *ROUTER* here. So a broadcast won't pass through anyway! By turning on proxy_arp on the host (uml_net does it by default), packets can be routed to uml withou adding a gateway record on every other host on the LAN, but broadcasts still don't pass through. You will have to explicitely set the DHCP server address. Or put tap0 and eth0 into a bridge on the host... and that you will have to set up manualy (including netmasks etc...). Warning: ethernet bridging is CPU hungry. ------------------------------------------------------------------------------- Jan 'Bulb' Hudec <bu...@uc...> |
From: Jeff D. <jd...@ka...> - 2003-01-27 17:45:53
|
bu...@uc... said: > The netmask is NOT errorneout. It's a point-to-point (virtual) link. > So it must not have 24-bit netmask. It should if you've got another subnet on the other side of it, rather than a single UML. Jeff |
From: Jan H. <bu...@uc...> - 2003-01-28 09:10:42
|
On Mon, Jan 27, 2003 at 12:37:43PM -0500, Jeff Dike wrote: > bu...@uc... said: > > The netmask is NOT errorneout. It's a point-to-point (virtual) link. > > So it must not have 24-bit netmask. > > It should if you've got another subnet on the other side of it, rather than > a single UML. AFAIK you never have a subnet on the other end of it, but rather each UML has it's own point-to-point link. Or is the uml_net helper that clever to use one TUN/TAP for all uml instances (that would require a daemon routing packets to the right UML, right?)? ------------------------------------------------------------------------------- Jan 'Bulb' Hudec <bu...@uc...> |
From: Cameron K. <cam...@pa...> - 2003-01-28 06:24:06
|
On Mon, Jan 27, 2003 at 04:54:43AM -0800, Todd A. Jacobs wrote: > I'm trying to get a system to boot using DHCP. I'm booting with the > following: > > uml mem=128M devfs=nomount \ > ubd0=root_fs.cow,root_fs \ > ubd1=emptyfs.swap.1024 \ > eth0=tuntap,,,$(ifconfig eth0 | perl -ne 'print $1 if /addr:(\S+)/') Specifying the MAC address for the client UML the same as the host is not a good idea, as it violates the uniqueness principle. I suggest you generate the MAC address from some unique property of the UML instance, such as the COW name (if appropriate). Whatever you use should be non-changing, otherwise the MAC address will change, which would defeat the purpose of specifying an address in the first place. Have a look at my tip[1] on www.usermodelinux.org which shows a way of generating a suitable MAC address. You could also study the code in my umlstart[2] program. [1] http://usermodelinux.org/modules.php?name=News&file=article&sid=77 [2] http://nzgeeks.org/cameron/progs/umlstart.php -- Cameron Kerr Email: cam...@pa... Website: http://nzgeeks.org/cameron/ |
From: Todd A. J. <tja...@co...> - 2003-01-28 06:55:44
|
On Tue, 28 Jan 2003, Cameron Kerr wrote: > > eth0=tuntap,,,$(ifconfig eth0 | perl -ne 'print $1 if /addr:(\S+)/') > Specifying the MAC address for the client UML the same as the host is > not a good idea, as it violates the uniqueness principle. That's not the MAC address, that's the IP, which (as I understand it), *does* have to be the same as the host. I've found that setting a MAC address with tuntap seems to have no effect, e.g. the MAC address inside the virtual machine still seems to be all 0s. The original question was why I was getting a faulty netmask, which probably *is* somehow related to the MAC issue. I *still* can't use DHCP, but running ifconfig by hand (and not attempting to set a MAC address) seems to work. I'd just prefer to be able to use DHCP. -- "Of course I'm in shape! Round's a shape, isn't it?" |
From: Cameron K. <cam...@pa...> - 2003-01-28 08:16:29
|
On Mon, Jan 27, 2003 at 10:55:28PM -0800, Todd A. Jacobs wrote: > On Tue, 28 Jan 2003, Cameron Kerr wrote: > > > > eth0=tuntap,,,$(ifconfig eth0 | perl -ne 'print $1 if /addr:(\S+)/') > > > Specifying the MAC address for the client UML the same as the host is > > not a good idea, as it violates the uniqueness principle. > > That's not the MAC address, that's the IP, which (as I understand it), Oops, my mistake. > The original question was why I was getting a faulty netmask, which > probably *is* somehow related to the MAC issue. I *still* can't use DHCP, > but running ifconfig by hand (and not attempting to set a MAC address) > seems to work. I'd just prefer to be able to use DHCP. In order to use DHCP, you need to specify a MAC address. Otherwise, the MAC address is set based on the IP address when the UML device is ifconfig'd. Disclaimer: I don't really use TUN/TAP much, so what I say might be more relevant to the deamon transport. -- Cameron Kerr Email: cam...@pa... Website: http://nzgeeks.org/cameron/ |
From: Jan H. <bu...@uc...> - 2003-01-28 10:24:21
|
On Mon, Jan 27, 2003 at 10:55:28PM -0800, Todd A. Jacobs wrote: > On Tue, 28 Jan 2003, Cameron Kerr wrote: > > > > eth0=tuntap,,,$(ifconfig eth0 | perl -ne 'print $1 if /addr:(\S+)/') > > > Specifying the MAC address for the client UML the same as the host is > > not a good idea, as it violates the uniqueness principle. > > That's not the MAC address, that's the IP, which (as I understand it), > *does* have to be the same as the host. I've found that setting a MAC > address with tuntap seems to have no effect, e.g. the MAC address inside > the virtual machine still seems to be all 0s. > > The original question was why I was getting a faulty netmask, which > probably *is* somehow related to the MAC issue. I *still* can't use DHCP, > but running ifconfig by hand (and not attempting to set a MAC address) > seems to work. I'd just prefer to be able to use DHCP. You can't use DHCP unless it runs on the host. The trouble is that the UML is not on the ehthernet segment the host is on. An the only way to get it there is enable the ethernet bridging and put the tun/tap interface into the bridge. In fact, since the links are peer to peer, I am not sure if the user-mode side bothers to set it's MAC address at all... (could someone tell me?) Note: the netmask is NOT errorneous. Since it's a peer-to-peer link between the host and the uml, it only has a host route. And since the ONLY purpose of a netmask is to set a route, it's meaningless anyway! Another note: BSD seems to require routing tables, netmasks, arp tables etc to be consistent. Linux does not. So in linux the netmask only provides the default route! And the route is set up manualy anyway (I have an ethernet segment here, that has net 192.168.4.0/24 and interfaces 192.168.4.1, 192.168.4.2 and 192.168.1.106 are connected to it. It works, nobody minds (the 192.168.1.106 probably won't get broadcasts because I didn't bother to set broadcast address)). ------------------------------------------------------------------------------- Jan 'Bulb' Hudec <bu...@uc...> |
From: Todd A. J. <no...@co...> - 2003-01-28 19:43:15
|
On Tue, 28 Jan 2003, Jan Hudec wrote: > You can't use DHCP unless it runs on the host. The trouble is that the > UML is not on the ehthernet segment the host is on. An the only way to But if I manually run ifconfig inside the UML and assign an IP and netmask, it can talk to the rest of the universe. So, is it really a point-to-point between the UML and the host, with some kind of NAT performed by uml_net? I'm still not 100% clear on this. I guess the bottom line is that DHCP just doesn't work for UML systems that aren't being run on the DHCP server. Inconvenient, but not a huge tragedy. Is there a FAQ somewhere on how to implement DHCP for a UML system? -- "Of course I'm in shape! Round's a shape, isn't it?" |
From: James N. <jn...@nk...> - 2003-01-28 21:35:43
|
On Tue, 2003-01-28 at 14:43, Todd A. Jacobs wrote: > I guess the bottom line is that DHCP just doesn't work for UML systems > that aren't being run on the DHCP server. Inconvenient, but not a huge > tragedy. Well... You _could_ but it might be more trouble than its worth.. You need to assign each UML a unique MAC addr, then either: 1- Bridge the TUNTAP interfaces with your ethernet. -or- 2- Set up a dhcp relay (the "dhcp-relay" package, if you're using Debian. I think it's part of the ISC DHCPd distribution, otherwise.) -James -- James Neal <jn...@nk...> Networked Knowledge Systems This message bound by the following: http://www.nks.net/email_disclaimer.html |
From: Jan H. <bu...@uc...> - 2003-01-29 12:40:52
|
On Tue, Jan 28, 2003 at 11:43:05AM -0800, Todd A. Jacobs wrote: > On Tue, 28 Jan 2003, Jan Hudec wrote: > > > You can't use DHCP unless it runs on the host. The trouble is that the > > UML is not on the ehthernet segment the host is on. An the only way to > > But if I manually run ifconfig inside the UML and assign an IP and > netmask, it can talk to the rest of the universe. So, is it really a > point-to-point between the UML and the host, with some kind of NAT > performed by uml_net? I'm still not 100% clear on this. No, it's the proxy_arp magic! If you turn on the proxy arp--and uml_net does this automagically--if the uml asks for ARP on some IP accessible on it's other interface, it will send ARP reply with it's own MAC on the tap device, and uml send the packet to it as if it had a gateway set for the IP. > I guess the bottom line is that DHCP just doesn't work for UML systems > that aren't being run on the DHCP server. Inconvenient, but not a huge > tragedy. Well, if you put them into en ehternet bridge, it would. But ehternet bridge is not a particularly nice thing (because it needs nontrivial CPU time). By the way, something like "DHCP proxy" or "secondary DHCP server" could exist. I mean a DHCP server, that would query other DHCP server in the name of the original system and then forward the reply. (I am not familiar with the actual protocol, so it might turn out that some other protocol would be needed, but that does not matter that much - the main theing is that configuration could be kept in one place). ------------------------------------------------------------------------------- Jan 'Bulb' Hudec <bu...@uc...> |