Re: bootparamd doesn't allow parameters?
Dan, In the last episode (Aug 18), Brian J. McGovern said: I'm in the process of trying to set up a Solaris jumpstart server in a lab, and I decided for chuckles to do it with FreeBSD. The problem I'm running in to is that apparently, the Sun bootparamd allows you to pass parameters as fields, for instance, as a couple of sample fields out of the Solaris-generated /etc/bootparams (note: entry is clearly not complete, but I didn't want to distract) testserver rootopts=:rsize=32768 term=:vt100 However, if I move this directly in to FreeBSD's /etc/bootparams, it will complain that it can not answer the request for rootopts from the Sun box. Is there something I'm missing? the man page seems to allude to the fact that all entries should be in the format of host:/path/to/file. Or, am I going to have to look at finding another bootparamd than the stock one? The code silently fails if any host field doesn't resolve to a valid IP address. Try the attached diff, which lets your example line work for me. bootparamd is now passing the values back to the Sun box. I can't demonstrate that the Sun box is making use of them (although NFS transfer rates are up this morning, which may be an indication). Thanks for the quick patch. Now, its back to figuring out why it can't find my rules.ok file and automate the install :) -Brian ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to [EMAIL PROTECTED]
Re: bootparamd doesn't allow parameters?
Dan, Thanks. I'm out of the office today, but I'll give it a spin Monday and report. -brian --NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In the last episode (Aug 18), Brian J. McGovern said: I'm in the process of trying to set up a Solaris jumpstart server in a lab, and I decided for chuckles to do it with FreeBSD. The problem I'm running in to is that apparently, the Sun bootparamd allows you to pass parameters as fields, for instance, as a couple of sample fields out of the Solaris-generated /etc/bootparams (note: entry is clearly not complete, but I didn't want to distract) testserver rootopts=:rsize=32768 term=:vt100 However, if I move this directly in to FreeBSD's /etc/bootparams, it will complain that it can not answer the request for rootopts from the Sun box. Is there something I'm missing? the man page seems to allude to the fact that all entries should be in the format of host:/path/to/file. Or, am I going to have to look at finding another bootparamd than the stock one? The code silently fails if any host field doesn't resolve to a valid IP address. Try the attached diff, which lets your example line work for me. -- Dan Nelson [EMAIL PROTECTED] --NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=bootparamd.diff Index: bootparamd.c === RCS file: /home/ncvs/src/usr.sbin/bootparamd/bootparamd/bootparamd.c,v retrieving revision 1.11.4.1 diff -u -p -r1.11.4.1 bootparamd.c --- bootparamd.c 28 Nov 2004 14:10:19 - 1.11.4.1 +++ bootparamd.c 19 Aug 2005 03:20:23 - @@ -114,7 +114,7 @@ bp_getfile_res * bp_getfile_arg *getfile; struct svc_req *req; { - char *where, *index(); + char *where; static bp_getfile_res res; if (debug) @@ -127,35 +127,47 @@ struct svc_req *req; he = NULL; he = gethostbyname(getfile-client_name); - if (! he ) goto failed; + if (! he ) { +if (debug) warnx(bad hostname %s, getfile-client_name); +goto failed; + } strncpy(askname, he-h_name, sizeof(askname)); askname[sizeof(askname)-1] = 0; if (getthefile(askname, getfile-file_id,buffer,sizeof(buffer))) { +if (debug) warnx(matched: %s,buffer); +res.server_name = ; +res.server_path = ; +res.server_address.address_type = IP_ADDR_TYPE; +bzero(res.server_address.bp_address_u.ip_addr,4); + if ( (where = index(buffer,':')) ) { /* buffer is re-written to contain the name of the info of file */ strncpy(hostname, buffer, where - buffer); hostname[where - buffer] = '\0'; where++; strcpy(path, where); - he = gethostbyname(hostname); - if ( !he ) goto failed; - bcopy( he-h_addr, res.server_address.bp_address_u.ip_addr, 4); - res.server_name = hostname; res.server_path = path; - res.server_address.address_type = IP_ADDR_TYPE; -} -else { /* special for dump, answer with null strings */ - if (!strcmp(getfile-file_id, dump)) { -res.server_name = ; -res.server_path = ; -res.server_address.address_type = IP_ADDR_TYPE; -bzero(res.server_address.bp_address_u.ip_addr,4); - } else goto failed; + if (hostname[0]) { +he = gethostbyname(hostname); +if ( !he ) { + if (debug) warnx(invalid hostname %s, hostname); + goto failed; +} +bcopy( he-h_addr, res.server_address.bp_address_u.ip_addr, 4); +res.server_name = hostname; + } +} else { + /* XXX allow dump keyword with no value. Why? no idea. + Fail otherwise. */ + if (strcmp(getfile-file_id, dump)) { +if (debug) warnx(invalid value for keyword %s, getfile-file_id); +goto failed; + } } if (debug) - fprintf(stderr, returning server:%s path:%s address: %d.%d.%d.%d\n, + fprintf(stderr, returning server:\%s\ path:\%s\ address: %d.%d.% d.%d\n, res.server_name, res.server_path, 255 res.server_address.bp_address_u.ip_addr.net, 255 res.server_address.bp_address_u.ip_addr.host, --NzB8fVQJ5HfG6fxh-- ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to [EMAIL PROTECTED]
bootparamd doesn't allow parameters?
All, I'm in the process of trying to set up a Solaris jumpstart server in a lab, and I decided for chuckles to do it with FreeBSD. The problem I'm running in to is that apparently, the Sun bootparamd allows you to pass parameters as fields, for instance, as a couple of sample fields out of the Solaris-generated /etc/bootparams (note: entry is clearly not complete, but I didn't want to distract) testserver rootopts=:rsize=32768 term=:vt100 However, if I move this directly in to FreeBSD's /etc/bootparams, it will complain that it can not answer the request for rootopts from the Sun box. Is there something I'm missing? the man page seems to allude to the fact that all entries should be in the format of host:/path/to/file. Or, am I going to have to look at finding another bootparamd than the stock one? -Brian ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to [EMAIL PROTECTED]
Re: bootparamd doesn't allow parameters?
In the last episode (Aug 18), Brian J. McGovern said: I'm in the process of trying to set up a Solaris jumpstart server in a lab, and I decided for chuckles to do it with FreeBSD. The problem I'm running in to is that apparently, the Sun bootparamd allows you to pass parameters as fields, for instance, as a couple of sample fields out of the Solaris-generated /etc/bootparams (note: entry is clearly not complete, but I didn't want to distract) testserver rootopts=:rsize=32768 term=:vt100 However, if I move this directly in to FreeBSD's /etc/bootparams, it will complain that it can not answer the request for rootopts from the Sun box. Is there something I'm missing? the man page seems to allude to the fact that all entries should be in the format of host:/path/to/file. Or, am I going to have to look at finding another bootparamd than the stock one? The code silently fails if any host field doesn't resolve to a valid IP address. Try the attached diff, which lets your example line work for me. -- Dan Nelson [EMAIL PROTECTED] Index: bootparamd.c === RCS file: /home/ncvs/src/usr.sbin/bootparamd/bootparamd/bootparamd.c,v retrieving revision 1.11.4.1 diff -u -p -r1.11.4.1 bootparamd.c --- bootparamd.c28 Nov 2004 14:10:19 - 1.11.4.1 +++ bootparamd.c19 Aug 2005 03:20:23 - @@ -114,7 +114,7 @@ bp_getfile_res * bp_getfile_arg *getfile; struct svc_req *req; { - char *where, *index(); + char *where; static bp_getfile_res res; if (debug) @@ -127,35 +127,47 @@ struct svc_req *req; he = NULL; he = gethostbyname(getfile-client_name); - if (! he ) goto failed; + if (! he ) { +if (debug) warnx(bad hostname %s, getfile-client_name); +goto failed; + } strncpy(askname, he-h_name, sizeof(askname)); askname[sizeof(askname)-1] = 0; if (getthefile(askname, getfile-file_id,buffer,sizeof(buffer))) { +if (debug) warnx(matched: %s,buffer); +res.server_name = ; +res.server_path = ; +res.server_address.address_type = IP_ADDR_TYPE; +bzero(res.server_address.bp_address_u.ip_addr,4); + if ( (where = index(buffer,':')) ) { /* buffer is re-written to contain the name of the info of file */ strncpy(hostname, buffer, where - buffer); hostname[where - buffer] = '\0'; where++; strcpy(path, where); - he = gethostbyname(hostname); - if ( !he ) goto failed; - bcopy( he-h_addr, res.server_address.bp_address_u.ip_addr, 4); - res.server_name = hostname; res.server_path = path; - res.server_address.address_type = IP_ADDR_TYPE; -} -else { /* special for dump, answer with null strings */ - if (!strcmp(getfile-file_id, dump)) { - res.server_name = ; - res.server_path = ; -res.server_address.address_type = IP_ADDR_TYPE; - bzero(res.server_address.bp_address_u.ip_addr,4); - } else goto failed; + if (hostname[0]) { +he = gethostbyname(hostname); +if ( !he ) { + if (debug) warnx(invalid hostname %s, hostname); + goto failed; +} +bcopy( he-h_addr, res.server_address.bp_address_u.ip_addr, 4); +res.server_name = hostname; + } +} else { + /* XXX allow dump keyword with no value. Why? no idea. + Fail otherwise. */ + if (strcmp(getfile-file_id, dump)) { +if (debug) warnx(invalid value for keyword %s, getfile-file_id); +goto failed; + } } if (debug) - fprintf(stderr, returning server:%s path:%s address: %d.%d.%d.%d\n, + fprintf(stderr, returning server:\%s\ path:\%s\ address: %d.%d.%d.%d\n, res.server_name, res.server_path, 255 res.server_address.bp_address_u.ip_addr.net, 255 res.server_address.bp_address_u.ip_addr.host, ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to [EMAIL PROTECTED]