|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH v2 2/2] Add getservbyport_r and if_indextoname
Hi Vlad,
On 28.10.19, 14:24, "Minios-devel on behalf of Vlad-Andrei BĂDOIU (78692)"
<minios-devel-bounces@xxxxxxxxxxxxxxxxxxxx on behalf of
vlad_andrei.badoiu@xxxxxxxxxxxxxxx> wrote:
Hey Felipe,
This patch looks all right. There are several checkpath errors that may
be solved during the upstreaming.
Ok, I'll have a look.
One comment, since we have musl right around the corner this
implementation might have to be moved quite soon.
Yes, agree.
Thanks,
-- Felipe
Thanks,
Vlad
Reviewed-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx>
On 21.10.2019 16:46, Felipe Huici wrote:
> 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;
> +}
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |