[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT/CLICK PATCH v3 01/11] Initial public release: basic unikraft files
Add Makefile, Makefile.uk, Config.uk, .gitignore, .md files Signed-off-by: Felipe Huici <felipe.huici@xxxxxxxxx> Signed-off-by: Florian Schmidt <florian.schmidt@xxxxxxxxx> --- .gitignore | 4 ++ CODING_STYLE.md | 4 ++ CONTRIBUTING.md | 4 ++ COPYING.md | 47 ++++++++++++ Config.uk | 87 ++++++++++++++++++++++ MAINTAINERS.md | 10 +++ Makefile | 9 +++ Makefile.uk | 187 ++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 5 ++ 9 files changed, 357 insertions(+) create mode 100644 .gitignore create mode 100644 CODING_STYLE.md create mode 100644 CONTRIBUTING.md create mode 100644 COPYING.md create mode 100644 Config.uk create mode 100644 MAINTAINERS.md create mode 100644 Makefile create mode 100644 Makefile.uk create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a9fb71b --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.config +.config.old +..config.tmp +build/ diff --git a/CODING_STYLE.md b/CODING_STYLE.md new file mode 100644 index 0000000..5730041 --- /dev/null +++ b/CODING_STYLE.md @@ -0,0 +1,4 @@ +Coding Style +============ + +Please refer to the `CODING_STYLE.md` file in the main Unikraft repository. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..5f55eca --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,4 @@ +Contributing to Unikraft +======================= + +Please refer to the `CONTRIBUTING.md` file in the main Unikraft repository. diff --git a/COPYING.md b/COPYING.md new file mode 100644 index 0000000..52f3753 --- /dev/null +++ b/COPYING.md @@ -0,0 +1,47 @@ +License +======= + +Unikraft click wrappers +------------------------ + +This repository contains wrapper code to build the Click modular router with +Unikraft. The wrapper code is generally published under a BSD 3-clause licence. +each C code file in this repository should declare who is the copyright owner +and under which terms and conditions the code is licensed. If such a licence +note is missing, the following copyright notice will apply: + + Copyright (c) 2019, NEC Laboratories Europei 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. + +Click source code +------------------ + +During building, the build system will download the Click modular router source +This code has a variety of licences; please find more information in the +`LICENSE` file in Click's root directory, or at +https://raw.githubusercontent.com/kohler/click/master/LICENSE . diff --git a/Config.uk b/Config.uk new file mode 100644 index 0000000..96d946e --- /dev/null +++ b/Config.uk @@ -0,0 +1,87 @@ +### Invisible option for dependencies +config APP_DEPENDENCIES + bool + default y + +menuconfig LIBCLICK + bool "The Click modular router" + select UKUNISTD + select LIBNEWLIB + select LIBLWIP + default y + +if LIBCLICK + +config LIBCLICK_MAIN + bool "Enable Click main function" + default n + help + Define main function instead of click_main function + +config LIBCLICK_ELEMS_AQM + bool "Enable AQM elements" + default y + help + Build with IP elements + +config LIBCLICK_ELEMS_ETHERNET + bool "Enable Ethernet elements" + default y + help + Build with Ethernet elements + +config LIBCLICK_ELEMS_ETHERSWITCH + bool "Enable Ethernet switch elements" + default y + help + Build with Ethernet switch elements + +config LIBCLICK_ELEMS_ICMP + bool "Enable ICMP elements" + default y + help + Build with ICMP elements + +config LIBCLICK_ELEMS_IP + bool "Enable IP elements" + default y + help + Build with adaptive queue management elements + +config LIBCLICK_ELEMS_UNIKRAFT + bool "Enable Unikraft networking" + default y + help + Build with Unikraft FromDevice and ToDevice elements + +config LIBCLICK_ELEMS_LOCAL + bool "Enable local elements" + default y + help + Build with local elements + +config LIBCLICK_ELEMS_SIMPLE + bool "Enable simple elements" + default y + help + Build with simple elements + +config LIBCLICK_ELEMS_STANDARD + bool "Enable standard elements" + default y + help + Build with standard elements + +config LIBCLICK_ELEMS_TCPUDP + bool "Enable TCP/UDP elements" + default y + help + Build with TCP/UDP elements + +config LIBCLICK_ELEMS_THREADS + bool "Enable multi-threading elements" + default y + help + Build with multi-threading elements + +endif diff --git a/MAINTAINERS.md b/MAINTAINERS.md new file mode 100644 index 0000000..b1482c7 --- /dev/null +++ b/MAINTAINERS.md @@ -0,0 +1,10 @@ +Maintainers List +================ + +For notes on how to read this information, please refer to `MAINTAINERS.md` in +the main Unikraft repository. + + CLICK-UNIKRAFT + M: Felipe Huici <felipe.huici@xxxxxxxxx> + L: minios-devel@xxxxxxxxxxxxx + F: * diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..647c3ba --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +UK_ROOT ?= $(PWD)/../../unikraft +UK_LIBS ?= $(PWD)/../../libs +LIBS := $(UK_LIBS)/newlib:$(UK_LIBS)/lwip + +all: + @$(MAKE) -C $(UK_ROOT) A=$(PWD) L=$(LIBS) + +$(MAKECMDGOALS): + @$(MAKE) -C $(UK_ROOT) A=$(PWD) L=$(LIBS) $(MAKECMDGOALS) diff --git a/Makefile.uk b/Makefile.uk new file mode 100644 index 0000000..9885520 --- /dev/null +++ b/Makefile.uk @@ -0,0 +1,187 @@ +# +# 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. +# + +################################################################################ +# Check requirements: Click requires netdev access, so LWIP must not attach them +# Sadly, kconfig doesn't support an "unselect" option, so the next best thing +# we can do is catch this invalid configuration here and throw an error with +# an explanation what to do. +################################################################################ +ifeq ($(CONFIG_LWIP_AUTOIFACE),y) +$(error Click cannot be built with LWIP option "Automatically attach netifs"! Please disable) +endif + +################################################################################ +# Register with unikraft +################################################################################ +$(eval $(call addlib,libclick)) + +################################################################################ +# Sources +################################################################################ +LIBCLICK_COMMIT_HASH=a5384835a6cac10f8d44da4eeea8eaa8f8e6a0c2 +LIBCLICK_URL=https://codeload.github.com/kohler/click/zip/$(LIBCLICK_COMMIT_HASH) +$(eval $(call fetchas,libclick,$(LIBCLICK_URL),click-$(LIBCLICK_COMMIT_HASH).zip)) +LIBCLICK_PATCHDIR=$(LIBCLICK_BASE)/patches +$(eval $(call patch,libclick,$(LIBCLICK_PATCHDIR),click-$(LIBCLICK_COMMIT_HASH))) + +################################################################################ +# Helpers +################################################################################ +LIBCLICK_EXTRACTED=$(LIBCLICK_ORIGIN)/click-$(LIBCLICK_COMMIT_HASH) +LIBCLICK_ELEMENTS_DIR=$(LIBCLICK_EXTRACTED)/elements +LIBCLICK_BUILDTOOL=$(LIBCLICK_EXTRACTED)/bin/click-buildtool +LIBCLICK_ELEM_DIRS=aqm ethernet etherswitch icmp ip unikraft \ + local simple standard tcpudp threads + +################################################################################ +# Config Menu - Filter which element categories actually get built +################################################################################ +LIBCLICK_ELEM_DIRS_U=$(call uc,$(LIBCLICK_ELEM_DIRS)) +LIBCLICK_FILTERED_ELEM_DIRS_U := $(foreach V, $(LIBCLICK_ELEM_DIRS_U), \ + $(if $(filter y,$(CONFIG_LIBCLICK_ELEMS_$V)),$V)) +LIBCLICK_FILTERED_ELEM_DIRS=$(call lc,$(LIBCLICK_FILTERED_ELEM_DIRS_U)) + +################################################################################ +# App-specific Targets +################################################################################ + +# Run Click's configure script to generate tools needed by further prepare targets +$(LIBCLICK_BUILD)/.configured: $(LIBCLICK_BUILD)/.cpfromtodevs + $(call verbose_cmd,CONFIGURE,libclick: $(notdir $@),\ + cd $(LIBCLICK_EXTRACTED) && ./configure --enable-minios --with-xen=$(LIBCLICK_BUILD) --with-minios=$(LIBCLICK_BUILD) --with-newlib=$(LIBCLICK_BUILD) --with-lwip=$(LIBCLICK_BUILD) && \ + $(TOUCH) $@) + +# Generate element build rules using click-buildtool +$(LIBCLICK_BUILD)/.elementsmk: $(LIBCLICK_BUILD)/.configured $(UK_CONFIG_OUT) + $(call verbose_cmd,ELEMMK,libclick: $(notdir $@),\ + cd $(LIBCLICK_ELEMENTS_DIR) && echo "$(LIBCLICK_FILTERED_ELEM_DIRS)" | $(LIBCLICK_BUILDTOOL) findelem -r unikraft -X $(LIBCLICK_BUILD)/elements.exclude | grep -E "^[^#]" | awk '{print "LIBCLICK_SRCS-y += $$(LIBCLICK_EXTRACTED)/elements/" $$1}' > $@) + +# Generate elements.cc and add it to the build list +$(LIBCLICK_BUILD)/elements.cc: $(LIBCLICK_BUILD)/.elementsmk + $(call verbose_cmd,ELEMCC,libclick: $(notdir $@),\ + echo "$(LIBCLICK_FILTERED_ELEM_DIRS)" | $(LIBCLICK_BUILDTOOL) findelem -r unikraft -p $(LIBCLICK_ELEMENTS_DIR) -X $(LIBCLICK_BUILD)/elements.exclude > $(LIBCLICK_BUILD)/.elementsconf && \ + $(LIBCLICK_BUILDTOOL) elem2export < $(LIBCLICK_BUILD)/.elementsconf > $(LIBCLICK_BUILD)/elements.cc) + +$(LIBCLICK_BUILD)/.cpfromtodevs: $(LIBCLICK_BUILD)/.origin + $(call verbose_cmd,CP,libclick: $(notdir $@),\ + $(MKDIR) -p $(LIBCLICK_ORIGIN)/click-$(LIBCLICK_COMMIT_HASH)/elements && \ + $(CP) -r $(LIBCLICK_BASE)/unikraft $(LIBCLICK_ORIGIN)/click-$(LIBCLICK_COMMIT_HASH)/elements/ && \ + touch $@) + +ifneq ($(CONFIG_LIBCLICK_ELEMS_UNIKRAFT),) +$(LIBCLICK_BUILD)/.prepared: $(LIBCLICK_BUILD)/.cpfromtodevs $(LIBCLICK_BUILD)/elements.cc +else +$(LIBCLICK_BUILD)/.prepared: $(LIBCLICK_BUILD)/elements.cc +endif + +UK_PREPARE += $(LIBCLICK_BUILD)/.prepared + +################################################################################ +# App includes, compile flags +################################################################################ +LIBCLICK_CINCLUDES += -I$(LIBCLICK_BASE)/include \ + -I$(LIBCLICK_EXTRACTED) \ + -I$(LIBCLICK_EXTRACTED)/include \ + -I$(LIBLWIP_LWIP_SRCS)/include/posix +LIBCLICK_CXXINCLUDES += -I$(LIBCLICK_BASE)/include \ + -I$(LIBCLICK_EXTRACTED) \ + -I$(LIBCLICK_EXTRACTED)/include \ + -I$(LIBLWIP_LWIP_SRCS)/include/posix + +################################################################################ +# Global flags +################################################################################ +LIBCLICK_CFLAGS-y += -DLWIP_TIMEVAL_PRIVATE=0 -DCLICK_USERLEVEL +LIBCLICK_CXXFLAGS-y += -DLWIP_TIMEVAL_PRIVATE=0 -DCLICK_USERLEVEL -DHAVE_IP6 +LIBCLICK_CXXFLAGS += -fno-exceptions -fno-rtti -std=c++11 + +# Suppress some warnings to make the build process look neater +LIBCLICK_SUPPRESS_FLAGS := -Wno-strict-aliasing +LIBCLICK_CFLAGS-y += $(LIBCLICK_SUPPRESS_FLAGS) +LIBCLICK_CXXFLAGS-y += $(LIBCLICK_SUPPRESS_FLAGS) + +################################################################################ +# Unikraft <-> Click glue code +################################################################################ +LIBCLICK_SRCS-y += $(LIBCLICK_BASE)/click.cc + +################################################################################ +# Click sources +################################################################################ +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/archive.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/args.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/atomic.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/bighashmap_arena.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/bitvector.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/confparse.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/crc32.c +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/driver.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/element.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/elemfilter.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/error.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/etheraddress.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/gaprate.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/glue.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/handlercall.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/hashallocator.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/in_cksum.c +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/integers.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/ipaddress.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/ipflowid.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/iptable.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/lexer.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/master.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/md5.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/nameinfo.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/notifier.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/packet.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/router.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/routerthread.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/routervisitor.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/straccum.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/string.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/task.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/timer.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/timerset.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/timestamp.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/variableenv.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/ip6table.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/ip6address.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/ip6flowid.cc +LIBCLICK_SRCS-y += $(LIBCLICK_EXTRACTED)/lib/selectset.cc + +################################################################################ +# Click elements +################################################################################ +LIBCLICK_SRCS-y += $(LIBCLICK_BUILD)/elements.cc +-include $(LIBCLICK_BUILD)/.elementsmk diff --git a/README.md b/README.md new file mode 100644 index 0000000..2cde5b0 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +Click for Unikraft +=================== + +Please refer to the `README.md` as well as the documentation in the `doc/` +subdirectory of the main unikraft repository. -- 2.21.0 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |