From 13447688257cde2e26bc18a9d15e89c14d4cfa40 Mon Sep 17 00:00:00 2001 From: patacongo Date: Tue, 28 Aug 2007 23:38:15 +0000 Subject: [PATCH] Basic infrastructure for socket() and bind() git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@316 42af7a65-404d-4744-a932-0658087f49c3 --- include/sys/socket.h | 110 +++++++++++++++++++++++++++++++++++++++++++ include/sys/types.h | 5 +- net/Makefile | 10 ++-- net/bind.c | 75 +++++++++++++++++++++++++++++ net/socket.c | 72 ++++++++++++++++++++++++++++ 5 files changed, 267 insertions(+), 5 deletions(-) create mode 100644 include/sys/socket.h create mode 100644 net/bind.c create mode 100644 net/socket.c diff --git a/include/sys/socket.h b/include/sys/socket.h new file mode 100644 index 0000000000..b3524aa485 --- /dev/null +++ b/include/sys/socket.h @@ -0,0 +1,110 @@ +/**************************************************************************** + * socket.h + * + * Copyright (C) 2007 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * 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 NuttX 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 OWNER 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. + * + ****************************************************************************/ + +#ifndef __SYS_SOCKET_H +#define __SYS_SOCKET_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Definitions + ****************************************************************************/ + +/* The socket()domain parameter specifies a communication domain; this selects + * the protocol family which will be used for communication. + */ + +#define PF_UNIX 0 /* Local communication */ +#define PF_LOCAL 1 /* Local communication */ +#define PF_INET 2 /* IPv4 Internet protocols */ +#define PF_INET6 3 /* IPv6 Internet protocols */ +#define PF_IPX 4 /* IPX - Novell protocols */ +#define PF_NETLINK 5 /* Kernel user interface device */ +#define PF_X25 6 /* ITU-T X.25 / ISO-8208 protocol */ +#define PF_AX25 7 /* Amateur radio AX.25 protocol */ +#define PF_ATMPVC 8 /* Access to raw ATM PVCs */ +#define PF_APPLETALK 9 /* Appletalk */ +#define PF_PACKET 10 /* Low level packet interface */ + +/*The socket created by socket() has the indicated type, which specifies + * the communication semantics. + */ + +#define SOCK_STREAM 0 /* Provides sequenced, reliable, two-way, connection-based byte streams. + * An out-of-band data transmission mechanism may be supported. */ +#define SOCK_DGRAM 1 /* Supports datagrams (connectionless, unreliable messages of a fixed + * maximum length). */ +#define SOCK_SEQPACKET 2 /* Provides a sequenced, reliable, two-way connection-based data + * transmission path for datagrams of fixed maximum length; a consumer + * is required to read an entire packet with each read system call. */ +#define SOCK_RAW 3 /* Provides raw network protocol access. */ +#define SOCK_RDM 4 /* Provides a reliable datagram layer that does not guarantee ordering. */ +#define SOCK_PACKET 5 /* Obsolete and should not be used in new programs */ + +/**************************************************************************** + * Type Definitions + ****************************************************************************/ + +struct sockaddr +{ + sa_family_t sa_family; + char sa_data[14]; +}; + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +#undef EXTERN +#if defined(__cplusplus) +#define EXTERN extern "C" +extern "C" { +#else +#define EXTERN extern +#endif + +EXTERN int socket(int domain, int type, int protocol); +EXTERN int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen); + +#undef EXTERN +#if defined(__cplusplus) +} +#endif + +#endif /* __SYS_SOCKET_H */ diff --git a/include/sys/types.h b/include/sys/types.h index 97b2d7eed2..1788784b50 100644 --- a/include/sys/types.h +++ b/include/sys/types.h @@ -14,7 +14,7 @@ * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. - * 3. Neither the name Gregory Nutt nor the names of its contributors may be + * 3. Neither the name NuttX nor the names of its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. * @@ -123,6 +123,9 @@ typedef unsigned int sig_atomic_t; typedef int pid_t; typedef int STATUS; +typedef unsigned int socklen_t; +typedef uint16 sa_family_t; + /* Process entry point */ typedef int (*main_t)(int argc, char *argv[]); diff --git a/net/Makefile b/net/Makefile index 5aeacc2139..52c055014b 100644 --- a/net/Makefile +++ b/net/Makefile @@ -14,7 +14,7 @@ # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. -# 3. Neither the name Gregory Nutt nor the names of its contributors may be +# 3. Neither the name NuttX nor the names of its contributors may be # used to endorse or promote products derived from this software # without specific prior written permission. # @@ -38,13 +38,15 @@ MKDEP = $(TOPDIR)/tools/mkdeps.sh ifeq ($(CONFIG_NET_UIP),y) +STD_ASRCS = +STD_CSRCS = socket.c bind.c include uip/Make.defs endif -ASRCS = $(UIP_ASRCS) +ASRCS = $(STD_ASRCS) $(UIP_ASRCS) AOBJS = $(ASRCS:.S=$(OBJEXT)) -CSRCS = $(UIP_CSRCS) +CSRCS = $(STD_CSRCS) $(UIP_CSRCS) COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) @@ -70,7 +72,7 @@ $(BIN): $(OBJS) .depend: Makefile $(SRCS) ifeq ($(CONFIG_NET_UIP),y) - $(MKDEP) --dep-path uip $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep + $(MKDEP) --dep-path . --dep-path uip $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep endif touch $@ diff --git a/net/bind.c b/net/bind.c new file mode 100644 index 0000000000..56d96bb4c1 --- /dev/null +++ b/net/bind.c @@ -0,0 +1,75 @@ +/**************************************************************************** + * bind.c + * + * Copyright (C) 2007 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * 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 NuttX 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 OWNER 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include +#include +#include + +/**************************************************************************** + * Global Functions + ****************************************************************************/ + +/**************************************************************************** + * Function: bind + * + * Description: + * bind() gives the socket sockfd the local address my_addr. my_addr is + * addrlen bytes long. Traditionally, this is called “assigning a name to a + * socket.” When a socket is created with socket(2), it exists in a name space + * (address family) but has no name assigned. + * + * Parameters: + * sockfd Socket descriptor from socket + * my_addr Socket local address + * addrlen Length of my_addr + * + * Returned Value: + * 0 on success; -1 on error with errno set appropriately + * + * Assumptions: + * + ****************************************************************************/ + +int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen) +{ + *get_errno_ptr() = ENOSYS; + return ERROR; +} + diff --git a/net/socket.c b/net/socket.c new file mode 100644 index 0000000000..2fecee3f71 --- /dev/null +++ b/net/socket.c @@ -0,0 +1,72 @@ +/**************************************************************************** + * socket.c + * + * Copyright (C) 2007 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * 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 NuttX 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 OWNER 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include +#include +#include + +/**************************************************************************** + * Global Functions + ****************************************************************************/ + +/**************************************************************************** + * Function: socket + * + * Description: + * socket() creates an endpoint for communication and returns a descriptor. + * + * Parameters: + * domain (see sys/socket.h) + * type (see sys/socket.h) + * protocol (see sys/socket.h) + * + * Returned Value: + * 0 on success; -1 on error with errno set appropriately + * + * Assumptions: + * + ****************************************************************************/ + +int socket(int domain, int type, int protocol) +{ + *get_errno_ptr() = ENOSYS; + return ERROR; +} +