[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT/LIBLWIP PATCH v2 2/2] Add getservbyport_r and if_indextoname
Add stub for if_indextoname and full definition, taken from musl, for getservbyport_r . if_indextoname's stub returns 0 (i.e., interface 0), which should be good enough for our purposes. Signed-off-by: Felipe Huici <felipe.huici@xxxxxxxxx> --- Makefile.uk | 1 + ifname.c | 39 +++++++++++++++++++++++++++++++++ include/net/if.h | 2 ++ include/netdb.h | 8 +++++++ serv.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 106 insertions(+) create mode 100644 ifname.c diff --git a/Makefile.uk b/Makefile.uk index 79a6dc6..6983a9d 100644 --- a/Makefile.uk +++ b/Makefile.uk @@ -82,6 +82,7 @@ LIBLWIP_SRCS-$(CONFIG_LWIP_THREADS) += $(LIBLWIP_BASE)/mutex.c|unikraft LIBLWIP_SRCS-$(CONFIG_LWIP_THREADS) += $(LIBLWIP_BASE)/semaphore.c|unikraft LIBLWIP_SRCS-$(CONFIG_LWIP_THREADS) += $(LIBLWIP_BASE)/mailbox.c|unikraft LIBLWIP_SRCS-$(CONFIG_LWIP_THREADS) += $(LIBLWIP_BASE)/threads.c|unikraft +LIBLWIP_SRCS-y += $(LIBLWIP_BASE)/ifname.c|unikraft LIBLWIP_SRCS-y += $(LIBLWIP_BASE)/init.c|unikraft LIBLWIP_SRCS-y += $(LIBLWIP_BASE)/time.c|unikraft LIBLWIP_SRCS-$(CONFIG_LWIP_SOCKET) += $(LIBLWIP_BASE)/sockets.c|unikraft diff --git a/ifname.c b/ifname.c new file mode 100644 index 0000000..f622a3f --- /dev/null +++ b/ifname.c @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ +/* + * Copyright (c) 2019, NEC Laboratories Europe GmbH, NEC Corporation. + * All rights reserved. + * + * 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. Neither the name of the copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + * + * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY. + */ + +#include <net/if.h> + +char *if_indextoname(unsigned index, char *name) +{ + return 0; +} diff --git a/include/net/if.h b/include/net/if.h index 3fbfdec..9bb3c87 100644 --- a/include/net/if.h +++ b/include/net/if.h @@ -1 +1,3 @@ #include <compat/posix/net/if.h> + +char *if_indextoname (unsigned int, char *); diff --git a/include/netdb.h b/include/netdb.h index b100136..948a2e7 100644 --- a/include/netdb.h +++ b/include/netdb.h @@ -17,6 +17,7 @@ int getaddrinfo(const char *node, const char *service, struct addrinfo **res); void freeaddrinfo(struct addrinfo *res); + #endif /* LWIP_DNS && LWIP_SOCKET && !(LWIP_COMPAT_SOCKETS) */ const char *gai_strerror(int errcode); @@ -57,6 +58,10 @@ void setprotoent(int stayopen); #define NI_DGRAM 0x10 #define NI_NUMERICSCOPE 0x20 +/* Error value for getservbyport_r not defined by lwip/netdb.h */ +/* Imported from musl */ +#define EAI_SYSTEM 11 + /* Error values for getaddrinfo() not defined by lwip/netdb.h */ #define EAI_OVERFLOW 205 /* Argument buffer overflow. */ @@ -66,3 +71,6 @@ int getnameinfo(const struct sockaddr *addr, socklen_t addrlen, struct servent *getservbyname(const char *name, const char *proto); struct servent *getservbyport(int port, const char *proto); +int getservbyport_r(int port, const char *prots, struct servent *se, + char *buf, size_t buflen, struct servent **res); + diff --git a/serv.c b/serv.c index b273def..b08ffa4 100644 --- a/serv.c +++ b/serv.c @@ -32,7 +32,12 @@ */ #include <sys/socket.h> +#include <netinet/in.h> #include <netdb.h> +#include <inttypes.h> +#include <errno.h> +#include <string.h> +#include <stdlib.h> struct servent *getservbyname(const char *name __unused, const char *proto __unused) @@ -45,3 +50,54 @@ struct servent *getservbyport(int port __unused, { return NULL; } + +int getservbyport_r(int port, const char *prots, struct servent *se, char *buf, size_t buflen, struct servent **res) +{ + int i; + struct sockaddr_in sin = { + .sin_family = AF_INET, + .sin_port = port, + }; + + if (!prots) { + int r = getservbyport_r(port, "tcp", se, buf, buflen, res); + if (r) r = getservbyport_r(port, "udp", se, buf, buflen, res); + return r; + } + *res = 0; + + /* Align buffer */ + i = (uintptr_t)buf & (sizeof(char *)-1); + if (!i) i = sizeof(char *); + if (buflen < 3*sizeof(char *)-i) + return ERANGE; + buf += sizeof(char *)-i; + buflen -= sizeof(char *)-i; + + if (strcmp(prots, "tcp") && strcmp(prots, "udp")) return EINVAL; + + se->s_port = port; + se->s_proto = (char *)prots; + se->s_aliases = (void *)buf; + buf += 2*sizeof(char *); + buflen -= 2*sizeof(char *); + se->s_aliases[1] = 0; + se->s_aliases[0] = se->s_name = buf; + + switch (getnameinfo((void *)&sin, sizeof sin, 0, 0, buf, buflen, + strcmp(prots, "udp") ? 0 : NI_DGRAM)) { + case EAI_MEMORY: + case EAI_SYSTEM: + return ENOMEM; + default: + return ENOENT; + case 0: + break; + } + + /* A numeric port string is not a service record. */ + if (strtol(buf, 0, 10)==ntohs(port)) return ENOENT; + + *res = se; + return 0; +} -- 2.20.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |