diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2014-11-19 20:10:02 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2014-11-19 20:10:02 +0000 |
commit | 488bb12fd0af706881e23eb57ed2b9cc00113500 (patch) | |
tree | 474ae615ffbb76cc65b375d88bb8f07ef2cc4899 /sys/arch | |
parent | 6dc4794eb5ced258a26384f967b3a7ef1fcc63af (diff) |
Only keep {recv,send}udp() in the pxe-specific code, the remainder of what
used to be local net.c (renamed to pxe_udp.c) can now be obtained from
libsa's net.c rather than being duplicated.
No functional change.
Diffstat (limited to 'sys/arch')
-rw-r--r-- | sys/arch/amd64/stand/pxeboot/Makefile | 8 | ||||
-rw-r--r-- | sys/arch/amd64/stand/pxeboot/net.c | 288 | ||||
-rw-r--r-- | sys/arch/amd64/stand/pxeboot/pxe_udp.c | 75 | ||||
-rw-r--r-- | sys/arch/i386/stand/pxeboot/Makefile | 8 | ||||
-rw-r--r-- | sys/arch/i386/stand/pxeboot/net.c | 288 | ||||
-rw-r--r-- | sys/arch/i386/stand/pxeboot/pxe_udp.c | 75 |
6 files changed, 158 insertions, 584 deletions
diff --git a/sys/arch/amd64/stand/pxeboot/Makefile b/sys/arch/amd64/stand/pxeboot/Makefile index 9c757c2c601..3d0498eab2c 100644 --- a/sys/arch/amd64/stand/pxeboot/Makefile +++ b/sys/arch/amd64/stand/pxeboot/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.22 2014/07/15 22:14:37 deraadt Exp $ +# $OpenBSD: Makefile,v 1.23 2014/11/19 20:09:58 miod Exp $ MAN= pxeboot.8 @@ -7,7 +7,7 @@ S= ${.CURDIR}/../../../.. SADIR= ${.CURDIR}/.. PROG= pxeboot -SRCS= srt0.S conf.c devopen.c net.c open.c +SRCS= srt0.S conf.c devopen.c open.c LD?= ld SIZE?= size LDFLAGS+=-nostdlib -Bstatic -Ttext $(LINKADDR) -N -x -nopie @@ -20,7 +20,7 @@ BINMODE=644 SRCS+= machdep.c exec_i386.c cmd_i386.c SRCS+= gidt.S random_i386.S alloca.S biosdev.c bioscons.c gateA20.c \ memprobe.c diskprobe.c time.c ## biosprobe.c -SRCS+= pxe.c pxe_call.S pxe_net.c +SRCS+= pxe.c pxe_call.S pxe_net.c pxe_udp.c SRCS+= softraid.c .PATH: ${S}/stand/boot @@ -35,7 +35,7 @@ SRCS+= aes_xts.c explicit_bzero.c hmac_sha1.c pbkdf2.c rijndael.c sha1.c SRCS+= close.c closeall.c dev.c disklabel.c dkcksum.c fstat.c ioctl.c lseek.c \ read.c stat.c write.c cread.c readdir.c cons.c loadfile.c \ elf32.c elf64.c -SRCS+= ether.c netif.c rpc.c +SRCS+= ether.c net.c netif.c rpc.c SRCS+= bootp.c bootparam.c SRCS+= ufs.c nfs.c tftp.c diff --git a/sys/arch/amd64/stand/pxeboot/net.c b/sys/arch/amd64/stand/pxeboot/net.c deleted file mode 100644 index d7e8fbf11b6..00000000000 --- a/sys/arch/amd64/stand/pxeboot/net.c +++ /dev/null @@ -1,288 +0,0 @@ -/* $OpenBSD: net.c,v 1.3 2014/11/18 20:51:01 krw Exp $ */ -/* $NetBSD: net.c,v 1.14 1996/10/13 02:29:02 christos Exp $ */ - -/* - * Copyright (c) 1992 Regents of the University of California. - * All rights reserved. - * - * This software was developed by the Computer Systems Engineering group - * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and - * contributed to Berkeley. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Lawrence Berkeley Laboratory and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#) Header: net.c,v 1.9 93/08/06 19:32:15 leres Exp (LBL) - */ - -#include <sys/param.h> -#include <sys/socket.h> - -#include <net/if.h> -#include <netinet/in.h> - -#include <netinet/if_ether.h> -#include <netinet/ip.h> -#include <netinet/ip_var.h> -#include <netinet/udp.h> -#include <netinet/udp_var.h> - -#include <lib/libsa/stand.h> -#include <lib/libsa/net.h> - -#include <pxeboot.h> - -/* Caller must leave room for ethernet, ip and udp headers in front!! */ -ssize_t -sendudp(struct iodesc *d, void *pkt, size_t len) -{ - return pxesendudp(d, pkt, len); -} - -/* - * Receive a UDP packet and validate it is for us. - * Caller leaves room for the headers (Ether, IP, UDP) - */ -ssize_t -readudp(struct iodesc *d, void *pkt, size_t len, time_t tleft) -{ - return pxereadudp(d, pkt, len, tleft); -} - -/* - * Send a packet and wait for a reply, with exponential backoff. - * - * The send routine must return the actual number of bytes written. - * - * The receive routine can indicate success by returning the number of - * bytes read; it can return 0 to indicate EOF; it can return -1 with a - * non-zero errno to indicate failure; finally, it can return -1 with a - * zero errno to indicate it isn't done yet. - */ -ssize_t -sendrecv(struct iodesc *d, ssize_t (*sproc)(struct iodesc *, void *, size_t), - void *sbuf, size_t ssize, - ssize_t (*rproc)(struct iodesc *, void *, size_t, time_t), - void *rbuf, size_t rsize) -{ - ssize_t cc; - time_t t, tmo, tlast; - long tleft; - -#ifdef NET_DEBUG - if (debug) - printf("sendrecv: called\n"); -#endif - - tmo = MINTMO; - tlast = tleft = 0; - t = getsecs(); - for (;;) { - if (tleft <= 0) { - if (tmo >= MAXTMO) { - errno = ETIMEDOUT; - return -1; - } - cc = (*sproc)(d, sbuf, ssize); - if (cc < 0 || (size_t)cc < ssize) - panic("sendrecv: short write! (%d < %d)", - cc, ssize); - - tleft = tmo; - tmo <<= 1; - if (tmo > MAXTMO) - tmo = MAXTMO; - tlast = t; - } - - /* Try to get a packet and process it. */ - cc = (*rproc)(d, rbuf, rsize, tleft); - /* Return on data, EOF or real error. */ - if (cc != -1 || errno != 0) - return (cc); - - /* Timed out or didn't get the packet we're waiting for */ - t = getsecs(); - tleft -= t - tlast; - tlast = t; - } -} - -/* - * Like inet_addr() in the C library, but we only accept base-10. - * Return values are in network order. - */ -u_int32_t -inet_addr(char *cp) -{ - u_long val; - int n; - char c; - u_int parts[4]; - u_int *pp = parts; - - for (;;) { - /* - * Collect number up to ``.''. - * Values are specified as for C: - * 0x=hex, 0=octal, other=decimal. - */ - val = 0; - while ((c = *cp) != '\0') { - if (c >= '0' && c <= '9') { - val = (val * 10) + (c - '0'); - cp++; - continue; - } - break; - } - if (*cp == '.') { - /* - * Internet format: - * a.b.c.d - * a.b.c (with c treated as 16-bits) - * a.b (with b treated as 24 bits) - */ - if (pp >= parts + 3 || val > 0xff) - goto bad; - *pp++ = val, cp++; - } else - break; - } - /* - * Check for trailing characters. - */ - if (*cp != '\0') - goto bad; - - /* - * Concoct the address according to - * the number of parts specified. - */ - n = pp - parts + 1; - switch (n) { - - case 1: /* a -- 32 bits */ - break; - - case 2: /* a.b -- 8.24 bits */ - if (val > 0xffffff) - goto bad; - val |= parts[0] << 24; - break; - - case 3: /* a.b.c -- 8.8.16 bits */ - if (val > 0xffff) - goto bad; - val |= (parts[0] << 24) | (parts[1] << 16); - break; - - case 4: /* a.b.c.d -- 8.8.8.8 bits */ - if (val > 0xff) - goto bad; - val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); - break; - } - - return (htonl(val)); - bad: - return (htonl(INADDR_NONE)); -} - -char * -inet_ntoa(struct in_addr ia) -{ - return (intoa(ia.s_addr)); -} - -/* Similar to inet_ntoa() */ -char * -intoa(u_int32_t addr) -{ - char *cp; - u_int byte; - int n; - static char buf[sizeof(".255.255.255.255")]; - - NTOHL(addr); - cp = &buf[sizeof buf]; - *--cp = '\0'; - - n = 4; - do { - byte = addr & 0xff; - *--cp = byte % 10 + '0'; - byte /= 10; - if (byte > 0) { - *--cp = byte % 10 + '0'; - byte /= 10; - if (byte > 0) - *--cp = byte + '0'; - } - *--cp = '.'; - addr >>= 8; - } while (--n > 0); - - return (cp+1); -} - -static char * -number(char *s, int *n) -{ - for (*n = 0; isdigit(*s); s++) - *n = (*n * 10) + *s - '0'; - return s; -} - -u_int32_t -ip_convertaddr(char *p) -{ -#define IP_ANYADDR 0 - u_int32_t addr = 0, n; - - if (p == (char *)0 || *p == '\0') - return IP_ANYADDR; - p = number(p, &n); - addr |= (n << 24) & 0xff000000; - if (*p == '\0' || *p++ != '.') - return IP_ANYADDR; - p = number(p, &n); - addr |= (n << 16) & 0xff0000; - if (*p == '\0' || *p++ != '.') - return IP_ANYADDR; - p = number(p, &n); - addr |= (n << 8) & 0xff00; - if (*p == '\0' || *p++ != '.') - return IP_ANYADDR; - p = number(p, &n); - addr |= n & 0xff; - if (*p != '\0') - return IP_ANYADDR; - - return htonl(addr); -} diff --git a/sys/arch/amd64/stand/pxeboot/pxe_udp.c b/sys/arch/amd64/stand/pxeboot/pxe_udp.c new file mode 100644 index 00000000000..b24896516c7 --- /dev/null +++ b/sys/arch/amd64/stand/pxeboot/pxe_udp.c @@ -0,0 +1,75 @@ +/* $OpenBSD: pxe_udp.c,v 1.1 2014/11/19 20:09:58 miod Exp $ */ +/* $NetBSD: net.c,v 1.14 1996/10/13 02:29:02 christos Exp $ */ + +/* + * Copyright (c) 1992 Regents of the University of California. + * All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Lawrence Berkeley Laboratory and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#) Header: net.c,v 1.9 93/08/06 19:32:15 leres Exp (LBL) + */ + +#include <sys/param.h> +#include <sys/socket.h> + +#include <net/if.h> + +#include <netinet/in.h> +#include <netinet/if_ether.h> +#include <netinet/ip.h> +#include <netinet/ip_var.h> +#include <netinet/udp.h> +#include <netinet/udp_var.h> + +#include <lib/libsa/stand.h> +#include <lib/libsa/net.h> + +#include <pxeboot.h> + +/* Caller must leave room for ethernet, ip and udp headers in front!! */ +ssize_t +sendudp(struct iodesc *d, void *pkt, size_t len) +{ + return pxesendudp(d, pkt, len); +} + +/* + * Receive a UDP packet and validate it is for us. + * Caller leaves room for the headers (Ether, IP, UDP) + */ +ssize_t +readudp(struct iodesc *d, void *pkt, size_t len, time_t tleft) +{ + return pxereadudp(d, pkt, len, tleft); +} diff --git a/sys/arch/i386/stand/pxeboot/Makefile b/sys/arch/i386/stand/pxeboot/Makefile index 510e2675cfa..01019f6ce42 100644 --- a/sys/arch/i386/stand/pxeboot/Makefile +++ b/sys/arch/i386/stand/pxeboot/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.19 2014/07/15 22:14:37 deraadt Exp $ +# $OpenBSD: Makefile,v 1.20 2014/11/19 20:10:01 miod Exp $ MAN= pxeboot.8 @@ -7,7 +7,7 @@ S= ${.CURDIR}/../../../.. SADIR= ${.CURDIR}/.. PROG= pxeboot -SRCS= srt0.S conf.c devopen.c net.c open.c +SRCS= srt0.S conf.c devopen.c open.c LD?= ld SIZE?= size LDFLAGS+=-nostdlib -Bstatic -Ttext $(LINKADDR) -N -x -nopie @@ -21,7 +21,7 @@ SRCS+= alloca.S debug_i386.S gidt.S random_i386.S SRCS+= cmd_i386.c exec_i386.c gateA20.c machdep.c SRCS+= apmprobe.c bioscons.c biosdev.c debug.c diskprobe.c memprobe.c \ pciprobe.c ps2probe.c time.c -SRCS+= pxe_call.S pxe.c pxe_net.c +SRCS+= pxe_call.S pxe.c pxe_net.c pxe_udp.c SRCS+= softraid.c .PATH: ${S}/stand/boot @@ -35,7 +35,7 @@ SRCS+= close.c closeall.c cons.c cread.c dev.c disklabel.c dkcksum.c fstat.c \ lseek.c read.c readdir.c stat.c SRCS+= elf32.c elf64.c loadfile.c SRCS+= nfs.c ufs.c tftp.c -SRCS+= bootp.c ether.c netif.c rpc.c +SRCS+= bootp.c ether.c net.c netif.c rpc.c SRCS+= aes_xts.c explicit_bzero.c hmac_sha1.c pbkdf2.c rijndael.c sha1.c .PATH: ${S}/lib/libkern/arch/i386 diff --git a/sys/arch/i386/stand/pxeboot/net.c b/sys/arch/i386/stand/pxeboot/net.c deleted file mode 100644 index d7e8fbf11b6..00000000000 --- a/sys/arch/i386/stand/pxeboot/net.c +++ /dev/null @@ -1,288 +0,0 @@ -/* $OpenBSD: net.c,v 1.3 2014/11/18 20:51:01 krw Exp $ */ -/* $NetBSD: net.c,v 1.14 1996/10/13 02:29:02 christos Exp $ */ - -/* - * Copyright (c) 1992 Regents of the University of California. - * All rights reserved. - * - * This software was developed by the Computer Systems Engineering group - * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and - * contributed to Berkeley. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Lawrence Berkeley Laboratory and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#) Header: net.c,v 1.9 93/08/06 19:32:15 leres Exp (LBL) - */ - -#include <sys/param.h> -#include <sys/socket.h> - -#include <net/if.h> -#include <netinet/in.h> - -#include <netinet/if_ether.h> -#include <netinet/ip.h> -#include <netinet/ip_var.h> -#include <netinet/udp.h> -#include <netinet/udp_var.h> - -#include <lib/libsa/stand.h> -#include <lib/libsa/net.h> - -#include <pxeboot.h> - -/* Caller must leave room for ethernet, ip and udp headers in front!! */ -ssize_t -sendudp(struct iodesc *d, void *pkt, size_t len) -{ - return pxesendudp(d, pkt, len); -} - -/* - * Receive a UDP packet and validate it is for us. - * Caller leaves room for the headers (Ether, IP, UDP) - */ -ssize_t -readudp(struct iodesc *d, void *pkt, size_t len, time_t tleft) -{ - return pxereadudp(d, pkt, len, tleft); -} - -/* - * Send a packet and wait for a reply, with exponential backoff. - * - * The send routine must return the actual number of bytes written. - * - * The receive routine can indicate success by returning the number of - * bytes read; it can return 0 to indicate EOF; it can return -1 with a - * non-zero errno to indicate failure; finally, it can return -1 with a - * zero errno to indicate it isn't done yet. - */ -ssize_t -sendrecv(struct iodesc *d, ssize_t (*sproc)(struct iodesc *, void *, size_t), - void *sbuf, size_t ssize, - ssize_t (*rproc)(struct iodesc *, void *, size_t, time_t), - void *rbuf, size_t rsize) -{ - ssize_t cc; - time_t t, tmo, tlast; - long tleft; - -#ifdef NET_DEBUG - if (debug) - printf("sendrecv: called\n"); -#endif - - tmo = MINTMO; - tlast = tleft = 0; - t = getsecs(); - for (;;) { - if (tleft <= 0) { - if (tmo >= MAXTMO) { - errno = ETIMEDOUT; - return -1; - } - cc = (*sproc)(d, sbuf, ssize); - if (cc < 0 || (size_t)cc < ssize) - panic("sendrecv: short write! (%d < %d)", - cc, ssize); - - tleft = tmo; - tmo <<= 1; - if (tmo > MAXTMO) - tmo = MAXTMO; - tlast = t; - } - - /* Try to get a packet and process it. */ - cc = (*rproc)(d, rbuf, rsize, tleft); - /* Return on data, EOF or real error. */ - if (cc != -1 || errno != 0) - return (cc); - - /* Timed out or didn't get the packet we're waiting for */ - t = getsecs(); - tleft -= t - tlast; - tlast = t; - } -} - -/* - * Like inet_addr() in the C library, but we only accept base-10. - * Return values are in network order. - */ -u_int32_t -inet_addr(char *cp) -{ - u_long val; - int n; - char c; - u_int parts[4]; - u_int *pp = parts; - - for (;;) { - /* - * Collect number up to ``.''. - * Values are specified as for C: - * 0x=hex, 0=octal, other=decimal. - */ - val = 0; - while ((c = *cp) != '\0') { - if (c >= '0' && c <= '9') { - val = (val * 10) + (c - '0'); - cp++; - continue; - } - break; - } - if (*cp == '.') { - /* - * Internet format: - * a.b.c.d - * a.b.c (with c treated as 16-bits) - * a.b (with b treated as 24 bits) - */ - if (pp >= parts + 3 || val > 0xff) - goto bad; - *pp++ = val, cp++; - } else - break; - } - /* - * Check for trailing characters. - */ - if (*cp != '\0') - goto bad; - - /* - * Concoct the address according to - * the number of parts specified. - */ - n = pp - parts + 1; - switch (n) { - - case 1: /* a -- 32 bits */ - break; - - case 2: /* a.b -- 8.24 bits */ - if (val > 0xffffff) - goto bad; - val |= parts[0] << 24; - break; - - case 3: /* a.b.c -- 8.8.16 bits */ - if (val > 0xffff) - goto bad; - val |= (parts[0] << 24) | (parts[1] << 16); - break; - - case 4: /* a.b.c.d -- 8.8.8.8 bits */ - if (val > 0xff) - goto bad; - val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); - break; - } - - return (htonl(val)); - bad: - return (htonl(INADDR_NONE)); -} - -char * -inet_ntoa(struct in_addr ia) -{ - return (intoa(ia.s_addr)); -} - -/* Similar to inet_ntoa() */ -char * -intoa(u_int32_t addr) -{ - char *cp; - u_int byte; - int n; - static char buf[sizeof(".255.255.255.255")]; - - NTOHL(addr); - cp = &buf[sizeof buf]; - *--cp = '\0'; - - n = 4; - do { - byte = addr & 0xff; - *--cp = byte % 10 + '0'; - byte /= 10; - if (byte > 0) { - *--cp = byte % 10 + '0'; - byte /= 10; - if (byte > 0) - *--cp = byte + '0'; - } - *--cp = '.'; - addr >>= 8; - } while (--n > 0); - - return (cp+1); -} - -static char * -number(char *s, int *n) -{ - for (*n = 0; isdigit(*s); s++) - *n = (*n * 10) + *s - '0'; - return s; -} - -u_int32_t -ip_convertaddr(char *p) -{ -#define IP_ANYADDR 0 - u_int32_t addr = 0, n; - - if (p == (char *)0 || *p == '\0') - return IP_ANYADDR; - p = number(p, &n); - addr |= (n << 24) & 0xff000000; - if (*p == '\0' || *p++ != '.') - return IP_ANYADDR; - p = number(p, &n); - addr |= (n << 16) & 0xff0000; - if (*p == '\0' || *p++ != '.') - return IP_ANYADDR; - p = number(p, &n); - addr |= (n << 8) & 0xff00; - if (*p == '\0' || *p++ != '.') - return IP_ANYADDR; - p = number(p, &n); - addr |= n & 0xff; - if (*p != '\0') - return IP_ANYADDR; - - return htonl(addr); -} diff --git a/sys/arch/i386/stand/pxeboot/pxe_udp.c b/sys/arch/i386/stand/pxeboot/pxe_udp.c new file mode 100644 index 00000000000..58ad5cac836 --- /dev/null +++ b/sys/arch/i386/stand/pxeboot/pxe_udp.c @@ -0,0 +1,75 @@ +/* $OpenBSD: pxe_udp.c,v 1.1 2014/11/19 20:10:01 miod Exp $ */ +/* $NetBSD: net.c,v 1.14 1996/10/13 02:29:02 christos Exp $ */ + +/* + * Copyright (c) 1992 Regents of the University of California. + * All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Lawrence Berkeley Laboratory and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#) Header: net.c,v 1.9 93/08/06 19:32:15 leres Exp (LBL) + */ + +#include <sys/param.h> +#include <sys/socket.h> + +#include <net/if.h> + +#include <netinet/in.h> +#include <netinet/if_ether.h> +#include <netinet/ip.h> +#include <netinet/ip_var.h> +#include <netinet/udp.h> +#include <netinet/udp_var.h> + +#include <lib/libsa/stand.h> +#include <lib/libsa/net.h> + +#include <pxeboot.h> + +/* Caller must leave room for ethernet, ip and udp headers in front!! */ +ssize_t +sendudp(struct iodesc *d, void *pkt, size_t len) +{ + return pxesendudp(d, pkt, len); +} + +/* + * Receive a UDP packet and validate it is for us. + * Caller leaves room for the headers (Ether, IP, UDP) + */ +ssize_t +readudp(struct iodesc *d, void *pkt, size_t len, time_t tleft) +{ + return pxereadudp(d, pkt, len, tleft); +} |